设计模式-模板模式

模板模式适用于同一种流程有不同的实现方式的场景,比如春节回家,都会经历规划行程、选择交通工具、路线、到家这四个阶段,但是不同的人可能每个流程会不一样,比如时间规划有些人会请假,但是大部分人都会按照法定假日,然后交通工具不同的人有不同的选择,路线更是五花八门,可能最后到家这个步骤是一样的,我们理解成就是给家人见面

先定义一个基础模板类 BaseTemplate,列好具体实现步骤

/**
 * 基础模板
 */
public abstract class BaseTemplate {

    public void start(){
        plan();     // 时间规划
        traffic();  // 交通工具
        route();    // 路线规划
        home();     // 到家了
    }

    /**
     * 时间规划
     * 因为大部分人都是参照法定假日,所以这里可以直接在基础模板实现,如果有部分不一样的直接复写即可
     */
    public void plan() {
        System.out.println("法定假日是1.30号放假,2.10收假");
    }

    /**
     * 交通工具
     * 坐火车的人是大部分,所以可以直接实现坐火车的方法
     */
    public void traffic() {
        System.out.println("我坐火车回去了");
    }

    /**
     * 路线选择
     * 因为大家来自五湖四海,每个人的路线差异很大,这里就各自实现类去处理
     */
    public abstract void route();

    /**
     * 到家
     * 统一跟家里人吃饭
     */
    public void home() {
        System.out.println("到家吃饭了");
    }
}

然后具体类继承这个模板,如果有方法跟模板不一样就自己复写

  • zhangsan的返乡计划
/**
 * zhangsan的春节返乡计划
 * 只有路线不一样,其他的都使用通用模板
 */
public class ZhangSan extends BaseTemplate{

    @Override
    public void route() {
        System.out.println("广州 --> 长沙 --> 呼和浩特");
    }
}
  • lisi的返乡计划
/**
 * lisi的春节返乡计划
 * 选择自己自驾回去,因为路程远,所以要请2天假
 */
public class LiSi extends BaseTemplate{

    @Override
    public void plan() {
        System.out.println("我要请2天假,所以1.30回去,但是2.12回来");
    }

    @Override
    public void traffic() {
        System.out.println("我选择开自己的宝马回去");
    }

    @Override
    public void route() {
        System.out.println("广州 --> 石家庄 --> 鹤岗");
    }
}

具体方法的执行

public class TemplateTest {
    public static void main(String[] args) {
        ZhangSan zhangSan = new ZhangSan();
        System.out.println("========zhangsan的返乡计划开始========");
        zhangSan.start();

        System.out.println("========lisi的返乡计划开始========");
        LiSi liSi = new LiSi();
        liSi.start();
    }
}

在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值