十、模板方法模式

2018-10-28  本文已影响4人  Serenity那年

当我们要重复实现的一个过程或者一系列步骤中,这些过程或步骤都高度相似,也就是整个流程都很一致,但只是个别步骤在某些更详细的层次上的实现可能不同时,通常使用模板方法模式来处理;


一个类要想成为子类的模板,所有重复的代码都要上升到父类中去,而不是让每个子类重复去实现;

模板方法模式:定义一个操作中的流程步骤,而将一些步骤延迟到子类中。

模板方法使得子类可以不改变一个算法的结构,但能够重新定义该算法的某些特定步骤。

模板方法模式结构图.png
一、具体使用方式如下:
/**
 * Created by serenitynanian on 2018/6/5.
 * 模板方法模式
 */

public abstract class AbstractTemplate {

    /**
     * 一些抽象的具体行为,延迟到子类中去实现
     */
    public abstract void primitiveOperateOne();
    public abstract void primitiveOperateTwo();

    /**
     * 模板方法:给出了逻辑的骨架,而逻辑的组成是一些抽象的操作,
     *          具体的实现延迟到子类中;
     *          
     *  备注:骨架整体调用逻辑不能修改,但是能够根据不同的需求;        
     */
    public void templateMethod(){
        primitiveOperateOne();
        primitiveOperateTwo();
        System.out.println("执行了模板方法");
    }

}
/**
 * Created by serenitynanian on 2018/6/5.
 * 实现模板抽象类中的抽象方法,每一个AbstractTemplate都可以有任意多个ConcreteSub类,
 *      而每个ConcreteSub都可以实现不同的业务逻辑
 */

public class ConcreteSubA extends AbstractTemplate {
    @Override
    public void primitiveOperateOne() {
        System.out.println("实现类中primitiveOperateOne方法的逻辑执行");
    }

    @Override
    public void primitiveOperateTwo() {
        System.out.println("实现类中primitiveOperateTwo方法的逻辑执行");

    }
}
public class Test {

    public static void main(String[] args) {
        AbstractTemplate abstractTemplate ;

        abstractTemplate = new ConcreteSubA();
        abstractTemplate.templateMethod();
        
        abstractTemplate = new ConcreteSubB();
        abstractTemplate.templateMethod();
    }
}
二、总结
上一篇 下一篇

猜你喜欢

热点阅读