行为型模式——模板方法模式

一、介绍

  • 从生活角度理解,我们都在银行办理过多种业务,不管办理哪种业务,银行都有一个固定的流程,比如都需要先排队,然后办理业务,最后针对银行工作反馈评分等。在这个过程中,排队和反馈评分都是固定的套路,不会随着业务的不同而变化,但是办理的业务是不确定的,有可能是存钱业务,有可能是理财业务。因此,可以将其抽取一个模板,将排队操作和反馈评分操作统一并固定化,具体业务办理交给客户和柜员具体去处理。
  • 在模板模式中,一个抽象类公开定义了执行它的方法的方式或模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。

二、案例

  • 抽取模板
/**
 * 银行业务办理模板
 * 
 * @author zhangxs
 **/
public abstract class AbstractBankTemplate {
    public void takeNumber(){
        System.out.println("取号排队");
    }

    /**
     * 办理具体的业务,不确定的易变的部分抽象出来由子类实现
     */
    public abstract void transact();

    public void evaluate(){
        System.out.println("反馈评分");
    }

    public void process(){
        this.takeNumber();
        this.transact();
        this.evaluate();
    }
}
  • 存钱业务
/**
* 存钱业务
* 
* @author zhangxs
**/
public class DrawMoney extends AbstractBankTemplate {

    @Override
    public void transact() {
        System.out.println("我现在需要存钱!!!");
    }
}
  • 理财业务
/**
 * 理财业务
 *
 * @author zhangxs
 **/
public class ManageMoney extends AbstractBankTemplate {

    @Override
    public void transact() {
        System.out.println("我现在有2000千万,我想做理财!!!");
    }
}

三、测试

/**
 * 测试使用
 *
 * @author zhangxs
 **/
public class TestTemplateMethod {
    public static void main(String[] args) {
        AbstractBankTemplate drawMoney = new DrawMoney();
        drawMoney.process();

        AbstractBankTemplate manageMoney = new ManageMoney();
        manageMoney.process();
    }
}

四、总结

1、优点

模板方法模式通过把不变的行为抽象出来,去除子类中的重复代码。子类实现算法或业务的具体细节,有助于算法或业务的扩展。通过一个父类调用子类实现的操作,通过子类扩展增加新的行为,符合开闭原则。

2、缺点

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

3、适用场景

在某些类的算法或业务中,用了相同的方法,造成代码的重复的情况,或者需要控制子类扩展,子类必须遵守算法或业务规则的场景下,可以使用模板方法模式优化代码。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值