【HeadFirst设计模式】8.模板方法模式
模板方法
定义:
在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使用得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
策略模式:
定义一个算法家族,并让这些算法可以互换。正因为每一个算法都被封装起来了,所以客户可以轻易地使用不同的算法。
好莱坞原则:
别调用我们,我们会调用你。(依赖抽象)
与依赖倒置原则:
避免使用具体类,而多使用抽象
用模版方法来做排序(用非继承的方式实现模板方法):
在Arrays中提供了sort的静态方法,sort要求传进的是一个数组。
这里的sort是一个模板方法,但是它并不是通过继承来实现的,而是将该模样方法中所封装的算法的约束转移至数组中。
也就是说,被传进来的数组中的对象必须实现Comparable接口,否则sort无法对数组进行排序。
sort并不关心Comparable的具体行为,只要能提供sort排序所需要的接口即可。
要点:
模板方法定义了算法的步骤,把这些步骤的实现延迟到子类。
模板方法模式为我们的提供了一种代码复用的重要技巧。
模板方法的抽象类可以定义具体方法、抽象方法和钩子。
抽象方法由子类实现。
钩子是一种方法,它在抽象类中不做事,或者只做默认的事情,子类可以选择要不要去覆盖它。
为了防止子类改变模板方法中的算法,我们可以将模板方法声明为final。
好莱坞原则告诉我们,将决策权放在高层模块中,以便决定如何以及何时调用低层模块。
你将在真实世界代码中看到模版方法模式的许多变体,不要期待它们全部都是一眼就可以被你认出的。
策略模式和模板方法模式都封装衍,一个用组合,一个用继承。
工厂方法是模式方法的一种特殊版本。
OO原则备忘:
封装变化
多用组合,少用继承
针对接口编程,不针对实现编程
为交互对象之间的松耦合设计而努力
类应该对扩展开放,对修改封闭
依赖抽象,不要依赖具体类
只和朋友谈
别找我,我会找你