zoukankan      html  css  js  c++  java
  • [Objectoriented] : 控制反转

    前言 :

    参加点部落的活动,关于IoC(控制反转)大家有很多的讨论。
    本文排除对象生成的部份,单纯解释IoC为甚么叫做控制反转。
    本篇文章以之前写的 [Object-oriented] : 重用内容来举例。

    未IoC之前的对象图 :

    很明显的
    左边的组件A,相依右边的组件B。
    左边的对象,相依右边的对象

    image

    public class Robot
    {
        private Car _car = null;
    
        public Robot(Car car)
        {
            _car = car;
        }
    
        public void Work()
        {
            _car.Run();
        }
    }
    
    public class Car
    {
        public void Run()
        {
    
        }
    }

    IoC之后的对象图 :

    很清楚的看到,组件A不再相依组件B。
    反倒是组件B为了继承ICar接口,相依了组件A。(物件也是相依性反转)

    image

    public class Robot
    {
        private ICar _car = null;
    
        public Robot(ICar car)
        {
            _car = car;
        }
    
        public void Work()
        {
            _car.Run();
        }
    }
    
    public interface ICar
    {
        void Run();
    }
    
    public class Car : ICar
    {
        public void Run()
        {
    
        }
    }

    后记 :

    由上面的范例来看,
    很明显的对象的相依性方向改变了。
    还有组件的相依性方向也改变了。

    总的归纳起来。
    狭义的说 : 在切割对象相依性的时候,可以采用IoC。
    广义的说 : 在架构子系统或是应用层的时候,也可以采用IoC。
    广广义的说 : ASP.NET把页面的内容,交由程序设计师去撰写,也是IoC的一种应用。
    他是一种实现『切割相依性』、『重用上层,抽换下层』这些目的的模式。

    IoC不是很新奇的技术,甚至跟各种面向对象技术、设计模式都有点部份重合。
    但是主要是让我们在切割类别或是系统的时候,有个共同的名词。

    另外补充,学习模式是用来帮助设计、分析跟学习。
    学完了之后实际在工作上去实做, 等写到忘记这些模式名词,
    并且可以组合出自己需要的模式,才算真的有到一个段落。
    (怎么有点像倚天屠龙记的桥段...XD)

  • 相关阅读:
    Python:软科中国大学排名爬虫(2021.11.5)
    服务外包系统软件需求分析+原型
    JFinal极速开发框架
    Mapreduce实例——MapReduce自定义输入格式
    利用jieba分析词语频数
    Mapreduce实例——Reduce端join
    Mapreduce实例——Map端join
    Mapreduce实例——MapReduce自定义输出格式
    打卡
    Mongo数据库实验
  • 原文地址:https://www.cnblogs.com/clark159/p/2205096.html
Copyright © 2011-2022 走看看