【23种设计模式】之模板方法模式——Template Method

Template Method

一、定义

定义一个操作中算法的骨架(稳定),而将一些步骤延迟(变化)到子类中。

Template Method 使得子类可以不改变(复用)一个算法的结构,即可重定义(override重写)该算法的某些特定步骤。

二、假设场景

业务流程分五步,框架里面有固定的流程step1,step3,step5,应用程序使用框架,并自己编写其中的step2,step4

1、传统思路
//框架类
public class Template1_lib {

    void step1(){
        System.out.println("step1");
    }
    void step3(){
        System.out.println("step3");
    }
    void step5(){
        System.out.println("step5");
    }
}

 

 //框架类

public class Template1_lib {
​
    void step1(){
        System.out.println("step1");
    }
    void step3(){
        System.out.println("step3");
    }
    void step5(){
        System.out.println("step5");
    }
}
//应用程序类
public class Template1_app {
    boolean step2(){
        return true;
    }
    void step4(){
        System.out.println("step4");
    }
​
    /*
    模拟程序流程
     */
    public static void main(String[] args) {
        Template1_lib lib = new Template1_lib();
        Template1_app app = new Template1_app();
​
        lib.step1();
​
        if(app.step2()){
            lib.step3();
        }
​
        for(int i=0;i<4;i++){
            app.step4();
        }
​
        lib.step5();
    }
}

 

 

2、模板模式
public abstract class Template2_lib {
​
    protected void step1(){
        System.out.println("step1");
    }  //稳定
    protected void step3(){
        System.out.println("step3");
    }  //稳定
    protected void step5(){
        System.out.println("step5");
    }  //稳定
//抽象方法
    public abstract boolean step2();   //变化,由子类实现
    public abstract void step4();      //变化,由子类实现
//稳定流程骨架
    public void run(){
        step1();
​
        if(step2()){
            step3();
        }
​
        for(int i=0;i<4;i++){
            step4();
        }
​
        step5();
    }
}
public class Template2_app extends Template2_lib{
    @Override
    public boolean step2(){
        return true;   //子类重写实现
    }
​
    @Override
    public void step4(){
        System.out.println("step4"); //子类重写实现
    }
​
    /*
    模拟程序流程
     */
    public static void main(String[] args) {
        Template2_lib lib = new Template2_app();  //多态
​
        lib.run();
    }
​

三、总结

非常基础,常用

机制简洁,为很多应用程序框架提供了灵活的扩展点,

“不要调用我,让我来调用你”,反向控制

 

变化点与稳定点分离

 

 

转载于:https://www.cnblogs.com/tingtingzhou/p/10671991.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值