好莱坞原则和IOC控制反转

“不要给 我们打电话,我们会给你打电话(don‘t call us, we‘ll call you)”这是著名的 好莱坞原则。在好莱坞,把简历递交给演艺公司后就只有回家等待。由演艺公司对整个娱乐项的完全控制,演员只能被动式的接受公司的差使,在需要的环节中,完成自己的演出。
模板方法模式充分的体现了“好莱坞”原则。IOC是Inversion of Control的简称,IOC的原理就是基于好莱坞原则,所有的组件都是被动的(Passive),所有的组件初始化和调用都由容器负责。
所有的framework都是遵循好莱坞原则设计的,否则就不叫framework。framework使用IoC的目的:
  1.对基于接口编程的支持
  2.减少单件和抽象工厂的依赖
  3.降低业务和框架的耦合
  4.业务组件可复用,可插拔
好莱坞原则在软件开发领域中极受追捧:我们经常把控制逻辑写在其他地方(例如Framework)而非客户化的代码里,我们就更专注于客户化的逻辑,也就是说,外部逻辑负责调用我们客户化的逻辑。 在软件开发领域,我们又给它取了一个名字叫控制反转(IoC) [1]。
控制反转的涉及面十分广泛,有人认为它是一个模式,但是我更倾向于认为它是一个原则(Principle)。很多模式都实现了控制反转(例如模板方法模式),例如,我们第2章讲解的模板方法模式就是控制反转的一个很好应用,父类的模板方法控制子类的方法调用;还有,使用回调的方法都是控制反转的很好应 概念 用。
         再如,在Java标准库里,我们常用到查找和排序的这两个方法,binarySearch(…)和sort(…)方法,它们在执行过程中会调用对象的compareTo()方法(如果这些对象实现了java.lang.Comparable接口的话),或者调用我们所传递的回调接口java.util.Comparator对象的compare()方法来比较大小,最终完成查找/排序操作,这些都是控制反转的例子。
       此外,我们经常提到的框架(Framework),它最典型的特点其实就是控制反转:框架抽象了通用流程,我们可以通过框架提供的规范(比如子类化抽象类或者实现相关的接口,实现相关的交互协议和接口等等)就可以把客户化的代码植入流程中,完成各种定制的需求。框架和工具库(Library)的区别是:如果框架没有实现控制反转,那么框架就会退化为工具库。也就是说,使用工具库,你必须撰写调用它们的逻辑,每次调用它们都会完成相应的工作,并把控制权返回给调用者;而框架不需要客户程序撰写控制调用的逻辑,由框架专门负责。

猜你喜欢

转载自blog.csdn.net/qauchangqingwei/article/details/80959992