您的设计模式——模板方法模式【Template Method Pattern】

本文通过一个制作悍马模型的案例,详细讲解了模板方法设计模式的原理和应用。在面对紧迫的开发时间,作者按照领导的要求,逐步完善了模型的类设计,从最初的简单实现到最后考虑扩展性和稳定性的改进,展示了模板方法如何定义算法骨架,将不变部分与可变部分分离,以提高代码复用和可维护性。文章通过实际代码展示了如何在模板类中定义模板方法,以及如何通过钩子方法灵活控制子类的行为。
摘要由CSDN通过智能技术生成

周三,9:00,我刚刚坐到位置,打开电脑准备开始干活。
“小三,小三,叫一下其它同事,到会议室,开会”老大跑过来吼,带着淫笑。还不等大家坐稳,老
大就开讲了,
“告诉大家一个好消息,昨天终于把牛叉模型公司的口子打开了,要我们做悍马模型,虽然是第一个
车辆模型,但是我们有能力,有信心做好,我们一定要…(中间省略 20 分钟的讲话,如果你听过领导人的
讲话,这个你应该能够续上) ”
动员工作做完了,那就开始压任务了, “这次时间是非常紧张的,只有一个星期的时间,小三,你负责
在一个星期的时间把这批 10 万车模(注:车模是车辆模型的意思,不是香车美女那个车模)建设完成…”
“一个星期?这个…,是真做不完,要做分析,做模板,做测试,还要考虑扩展性、稳定性、健壮性
等,时间实在是太少了”还没等老大说完,我就急了,再不急我的小命就折在上面了!
“那这样,你只做实现,不考虑使用设计模式,扩展性等都不用考虑”老大又把我压回去了。
“不考虑设计模式?那…”
哎,领导已经布置任务了,那就开始死命的做吧,命苦不能怨政府,点背不能怪社会呀,然后就开始
准备动手做,在做之前先介绍一下我们公司的背景,我们公司是做模型生产的,做过桥梁模型、建筑模型、
机械模型,甚至是一些政府、军事的机密模型,这个不能说,就是把真实的实物按照一定的比例缩小或放
大,用于试验、分析、量化或者是销售等等,上面提到的牛叉模型公司专门销售车辆模型的公司,自己不
生产,我们公司是第一次从牛叉模型公司接单,那我怎么着也要把活干好,可时间很紧张呀,怎么办?
既然领导都说了,不考虑扩展性,那好办,我先设计个类图:

这里写图片描述

非常简单的实现,你要悍马模型,我就给你悍马模型,先写个抽象类,然后两个不同型号的模型实现
类,那我们把这个程序实现出来:
HummerModel 抽象类的程序清单如下:

package com.alex.patterns.templateMethod;

/**
 * @author Alex
 * Model是悍马车辆模型的意思,不是悍马美女车模
 */
public abstract class HummerModel {
   
    /*
     * 首先,这个模型要能够被发动起来,别管是手摇发动,还是电力发动,反正 是要能够发动起来,那这个实现要在实现类里了
     */
    public abstract void start();

    // 能发动,那还要能停下来,那才是真本事
    public abstract void stop();

    // 喇叭会出声音,是滴滴叫,还是哔哔叫
    public abstract void alarm();

    // 引擎会轰隆隆的响,不响那是假的
    public abstract void engineBoom();

    // 那模型应该会跑吧,别管是人推的,还是电力驱动,总之要会跑
    public abstract void run();
}

H1 型号悍马的定义如下:

package com.alex.patterns.templateMethod;

/**
 * @author Alex
 * 悍马车是每个越野者的最爱,其中H1最接近军用系列
 */
public class HummerH1Model extends HummerModel {
   
    @Override
    public void alarm() {
        System.out.println("悍马H1鸣笛...");
    }

    @Override
    public void engineBoom() {
        System.out.println("悍马H1引擎声音是这样在...");
    }

    @Override
    public void start() {
        System.out.println("悍马H1发动...");
    }

    @Override
    public void stop() {
        System.out.println("悍马H1停车...");
    }

    /*
     * 这个方法是很有意思的,它要跑,那肯定要启动,停止了等,也就是要调其他方法
     */
    @Override
    public void run() {
        // 先发动汽车
        this.start();
        // 引擎开始轰鸣
        this.engineBoom();
        // 然后就开始跑了,跑的过程中遇到一条狗挡路,就按喇叭
        this.alarm();
        // 到达目的地就停车
        this.stop();
    }
}

然后看悍马 H2 型号的实现:

package com.alex.patterns.templateMethod;

/**
 * @author Alex
 * H1和H2有什么差别,还真不知道,真没接触过悍马
 */
public 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值