模板方法模式
(1)定义
在模板中定义一个操作中算法的骨架,而将一些步骤延迟到子类中。模板方法使子类可以重新定义算法的某些特定步骤而不改变算法的结构。
(2)主要思想
在抽象类(模板类)的一个方法中定义算法,在这个方法中调用的基本操作由子类重载予以实现。这个方法称为”模板“,--抽象类定义模版,子类重载基本操作以提供独特操作懂摸板方法调用
(3)类图
ConcreteClass重载AbstractClass的primitiveOperation1和primitiveOperation2,以在Client调用
AbstractClass中的templateMethod
(4)何时使用
(1)需要一次性实现算法的不变部分,并将可变得行为留给子类来实现。
(2)子类的共同行为应该被提取出来放到公共类中,以避免代码重复。现有代码的差别应该被分离为新的操作。然后用一个调用这些新操作的模板方法来替换这些不同的代码。
(3)需要控制子类的扩展。可以定义一个在特定点调用“钩子”(hook)操作的模板方法。子类可以通过钩子操作的实现在这些点扩展功能。
模板方法调用5种类型的操作
(1)对具体类或客户端类的具体操作;
(2)对抽象类的具体操作;
(3)抽象操作;
(4)工厂方法;
(5)钩子操作。