Java设计模式之模板方法模式

        我们经常会遇到这么一种场景,就是某个业务流程,这个流程一共得分好几步完成,针对不同的情况,这几步的处理逻辑可能是不一样的,但是整体的流程上就是这么几步,如果遇到这种场景,我们就可以使用我们今天需要分享的设计模式,模板方法模式。这个设计模式在我们的实际生活中也很常见,例如去医院看病,去医院看病,每个人去看病,都是不一样的,你看感冒,他看胃疼,其他人看其他的病,但是呢,医院看病的流程实际上是大致上相同的,一般分为如下几个步骤,挂号、签到、等待叫号、医生诊断、检查指标、医生根据检查报告诊断病因、开处方单、付款拿药、结束。是不是看病都是这么个流程?这就是一种模板方法模式的体现,那么我们如何在代码中来体现这种呢?我们就通过医院看病来进行代码演示

定义一个流程步骤类,源码如下

public abstract class AbstractDiagnosis {

    /**
     * 使用医院看病来举例模板方法模式
     * 去医院看病,整体的流程是
     * 1. 挂号
     * 2. 医生叫号
     * 3. 医生诊断
     * 4. 医生根据病因开处方单
     * 5. 付款拿药
     * 但是具体的科室就有不同的处理方式
     */
    public void treatment() {
        //第一步
        register();
        //第二步
        waitCall();
        //第三步
        diagnosis();
        //第四步
        prescription();
        //第五步
        pay();
    }

    public void register() {
        System.out.println("1. 挂号完成,等待医生叫号。");
    }

    public void waitCall() {
        System.out.println("2. 医生叫号。");
    }

    public abstract void diagnosis();

    public abstract void prescription();

    public void pay() {
        System.out.println("5. 付款成功,取药回家。");
    }
}

创建两个不同病的处理类,感冒类

public class GanMaoDiagnosis extends AbstractDiagnosis {

    @Override
    public void treatment() {
        super.treatment();
    }

    @Override
    public void diagnosis() {
        System.out.println("3. 病毒感染导致感冒了");
    }

    @Override
    public void prescription() {
        System.out.println("4. 给你开点头孢回去吃");
    }
}

拉肚子类

public class LaDuZiDiagnosis extends AbstractDiagnosis {

    @Override
    public void treatment() {
        super.treatment();
    }

    @Override
    public void diagnosis() {
        System.out.println("3. 你着凉才拉肚子了");
    }

    @Override
    public void prescription() {
        System.out.println("4. 给你点999暖胃");
    }
}

测试代码

public class Main {

    public static void main(String[] args) {
        AbstractDiagnosis ganMao = new GanMaoDiagnosis();
        ganMao.treatment();
        System.out.println("===============分割线===============");
        AbstractDiagnosis laDuZi = new LaDuZiDiagnosis();
        laDuZi.treatment();
    }
}

效果展示

我们从案例中大体上可以对模板方法的思路有一定的认识,流程步骤相同,流程实现不同的场景就可以使用这种设计模式了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值