模板方法模式

来源:互联网 发布:c 函数定义数组长度 编辑:程序博客网 时间:2024/05/17 00:59

一、什么是模板方法模式?

        模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。

    涉及到的角色:

        抽象类(AbstractClass):实现了模板方法,定义了算法的骨架。
具体类(ConcreteClass):实现抽象类中的抽象方法,已完成完整的算法。
 

类图

     

代码类:

AbstractClass : 抽象类,定义并实现一个模板方法。这个模板方法定义了算法的骨架,而逻辑的组成步骤在相应的抽象操作中,推迟到子类去实现。顶级逻辑也有可能调用一些具体方法

 
abstract class AbstractClass {
    public abstract void PrimitiveOperation1();
    public abstract void PrimitiveOperation2();
    
    public void TemplateMethod() {
        PrimitiveOperation1();
        PrimitiveOperation2();
    }
}
ConcreteClass : 实现实现父类所定义的一个或多个抽象方法。
 
class ConcreteClassA extends AbstractClass {
    @Override
    public void PrimitiveOperation1() {
        System.out.println("具体A类方法1");
    }


    @Override
    public void PrimitiveOperation2() {
        System.out.println("具体A类方法2");
    }
}
class ConcreteClassB extends AbstractClass {
    @Override
    public void PrimitiveOperation1() {
        System.out.println("具体B类方法1");
    }


    @Override
    public void PrimitiveOperation2() {
        System.out.println("具体B类方法2");
    }    

测试代码
 
public class TemplateMethodPattern {
    public static void main(String[] args) {
        AbstractClass objA = new ConcreteClassA();
        AbstractClass objB = new ConcreteClassB();    
        objA.TemplateMethod();
        objB.TemplateMethod();
    }
}
 

二、模板方法模式优缺点

1、模板方法模式通过把不变的行为搬移到超类,去除了子类中的重复代码。
2、子类实现算法的某些细节,有助于算法的扩展。
3、通过一个父类调用子类实现的操作,通过子类扩展增加新的行为,符合“开放-封闭原则”。

4、每个不同的实现都需要定义一个子类,这会导致类的个数的增加,设计更加抽象。

三、使用场景

模板方法可以用于一次性实现一个算法的不变的部分,并将可变的部分留给子类去实现;子类的公共代码部分应该被提炼到父类中去写好,防止代码重复编写;控制子类的扩展,模板方法只允许在特定点调用钩子函数,这样就只允许在这些点进行扩展。


参考文章:点击打开链接




0 0
原创粉丝点击