模板方法模式
在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。策略模式和模板方法模式都封装算法,策略用组合,模板用继承。
工厂方法是模板方法的一种特殊版本。
钩子是一种被声明在抽象类中的方法,只有默认实现。钩子的存在可让子类有能力对算法的不同点进行挂钩。要不要hook,由子类决定。p292代码
当你的子类必须实现某个方法/步骤时,就把方法声明成abstract的。如果算法的这个部分是可选的,就使用钩子。
缺点:忽略了2种饮料冲泡过程的一些其他相似点。
好莱坞原则提供了一种防止“依赖腐败”的方法。
依赖腐败:当高层组件依赖低层组件,而低层组件又依赖高层组件,而高层组件有依赖边侧组件,而边侧组件又依赖低层组件时,依赖腐败旧发生了。此时,没人能轻易搞懂系统是如何设计的。
在好莱坞原则下,我们允许低层组件将自己挂钩到系统上,但是高层组件会决定什么时候和怎样使用低层组件。换句话说,高层组件对待低层组件的方式是“别调用我们,我们会调用你”。p296图。
好莱坞原则是用在创建框架或组件上的一种技巧,好让低层组件能够被挂钩进计算中,而又不让会让高层组件依赖低层组件。
例子:p297图