模板方法模式

1、场景

客户到银行办理业务:
1、取号排队
2、办理具体现金、转账、理财业务
3、给银行工作人员评分
请客吃饭
1、点单
2、吃东西(吃面条、吃满汉全席)
3、买单

2、介绍

模板方法模式定义了一个操作中的算法骨架,将某些步骤延迟到子类中实现,新的子类在不改变一个算法骨架结构的前提下重新定义该算法的某些特定步骤。

处理步骤已经定义好,具体的实现需要在子类中定义。

3、什么时候用到模板方法模式

实现一个算法时,整体步骤很固定,但是某些部分易变,易变部分可以抽象出来,供子类实现。

4、代码示例

public abstract class BankTemplateMethod {
    //具体方法
    public void takeNumber(){
        System.out.println("排队取号");
    }
    public abstract void transact();  //办理具体业务,钩子方法

    public  void evaluate(){
        System.out.println("反馈评分");
    }
    //模板
    public final void process(){
        this.takeNumber();
        this.transact();
        this.evaluate();
    }
}

package templateMethod;

/**
 * @author tqq
 * @date 2021-04-02-15:27
 */
public class Client {
    public static void main(String[] args) {
        BankTemplateMethod btm = new DrawMoney();
        btm.process();

        /**
         * 采用匿名内部类
         */
        BankTemplateMethod btm2 = new BankTemplateMethod() {
            @Override
            public void transact() {
                System.out.println("我要存钱!!");
            }
        };
        btm2.process();
        BankTemplateMethod btm3 = new BankTemplateMethod() {
            @Override
            public void transact() {
                System.out.println("我要理财,我有2000万韩币");
            }
        };
        btm3.process();

        BankTemplateMethod btm4 = new BankTemplateMethod() {
            @Override
            public void transact() {
                System.out.println("我来定期存款!");
            }
        };
        btm4.process();


    }
}
class DrawMoney extends BankTemplateMethod{

    @Override
    public void transact() {
        System.out.println("我要取款!!!");
    }
}


你可能感兴趣的:(设计模式,模板方法模式,java,开发语言)