【HeadFirst设计模式】8.模板方法模式

模板方法

  定义:

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

策略模式:

  定义一个算法家族,并让这些算法可以互换。正因为每一个算法都被封装起来了,所以客户可以轻易地使用不同的算法。

  

好莱坞原则:

  别调用我们,我们会调用你。(依赖抽象)

  与依赖倒置原则:

    避免使用具体类,而多使用抽象

用模版方法来做排序(用非继承的方式实现模板方法):

  在Arrays中提供了sort的静态方法,sort要求传进的是一个数组。

  这里的sort是一个模板方法,但是它并不是通过继承来实现的,而是将该模样方法中所封装的算法的约束转移至数组中。

  也就是说,被传进来的数组中的对象必须实现Comparable接口,否则sort无法对数组进行排序。

  sort并不关心Comparable的具体行为,只要能提供sort排序所需要的接口即可。

要点:

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

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

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

  抽象方法由子类实现。

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

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

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

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

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

  工厂方法是模式方法的一种特殊版本。

  

OO原则备忘:

  封装变化

  多用组合,少用继承

  针对接口编程,不针对实现编程

  为交互对象之间的松耦合设计而努力

  类应该对扩展开放,对修改封闭

  依赖抽象,不要依赖具体类

  只和朋友谈

  别找我,我会找你

  

原文地址:https://www.cnblogs.com/laizhd/p/3631940.html