Template Method 模板方法模式
1.定义
模板方法模式定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
2.阐述
什么是“模板”?模板在这个模式中就是一个具体的方法。这个方法定了实现某一算法的一组步骤,其中的任何步骤都可以是抽象的,由子类负责实现。这样可以确保算法的结构保持不变,同时由子类提供部分实现。
模板方法模式一次性实现了一个算法的不变部分(例:算法实现步骤),并将可变的行为留给子类来实现。 它可帮助我们去除同一类层次结构中子类所包含的相似方法中的重复代码。
模板方法模式中的不变行为由如下几点组成:
i.被调用的方法和调用的顺序;
ii.子类必须重写的重写的抽象方法;
iii.子类可能会重写的钩子方法;
3.UML
在UML图中,父类中的templateMethod是一个抽象方法,这个方法内按照一定顺序调用了四个方法——primitiveOpertion1、primitiveOpertion2、concreteOpertion、hook,其中primitiveOpertion1和primitiveOpertion2都是抽象方法,需要子类根据具体情况去实现,但算法的整体框架是由父类中的templateMethod方法来控制的。
4.使用
对于Client,一个实现了模板方法模式的类结构如何使用呢?
PHP代码如下:
$subClass2 = new SubClass2();
$subClass2->templateMethod();
5. 结论
模板方法模式是一种比较简单的设计模式,也比较常见,应该予以掌握。
参考资料: 《重构与模式》
《Head First设计模式》