设计模式-模板方法模式

来源:互联网 发布:火鸟中文移动编程 编辑:程序博客网 时间:2024/05/16 05:41

一、模板方法模式

模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。

二、UML类图


三、钩子

钩子是一种被声明在抽象类中的方法,但只有空的或者默认的实现。钩子的存在可以让子类有能力对算法的不同点进行挂钩。要不要挂钩,由子类自行决定。

四、好莱坞原则

别调用(打电话给)我们,我们会调用(打电话给)你。

好莱坞原则可以给我们一种防止“依赖腐败”的方法。当高层组件依赖低层组件,而低层组件又依赖高层组件,而高层组件又依赖边侧组件,而边侧组件又依赖低层组件时,依赖腐败就发生了。在这种情况下,没有人可以轻易地搞懂系统是如何设计的。

好莱坞原则之下,我们允许低层组件将自己挂钩到系统上,但是高层组件会决定什么时候和怎样使用这些低层组件。换句话说,高层组件对低层组件的方式是“别调用我们,我们会调用你”。

好莱坞原则和模板方法之间的连接其实还算明显:当我们设计模板方法模式时,我们告诉子类,“不要调用我们,我们会调用你”。

eg:


五、相似方法回顾与对比

模板方法:子类决定如何实现算法中的某些步骤。

策略:封装可互换的行为,然后使用委托来决定要采用哪一个行为。

工厂方法:由子类决定实例化哪个具体类。

六、要点

1、“模板方法”定义了算法的步骤,把这些步骤的实现延迟到子类。

2、模板方法模式为我们提供了一种代码复用的重要技巧。

3、模板方法的抽象类可以定义具体方法、抽象方法和钩子。

4、抽象方法由子类实现。

5、钩子是一种方法,它在抽象类中不做事,或者只做默认的事情,子类可以选择要不要覆盖它。

6、为了防止子类改变模板方法中的算法,可以将模板方法声明为final。

7、好莱坞原则告诉我们,将决策权放在高层模块中,以便决定如何以及何时调用低层模块。

8、你将在真实世界代码中看到模板方法模式的许多变体,不要期待它们全都是一眼就可以被你认出的。

9、策略模式和模板方法模式都封装算法,一个用组合,一个用继承。

10、工厂方法是模板方法的一种特殊版本。


原创粉丝点击