模板方法模式

顶层设计: 抽象类 【 汽车模型】

复制代码
package com.designer.designerdemo.template;

/**
 * 基本方法 : start(), stop(), alarm(), engineBoom()
 * 模板方法 : run()
 */
public abstract class AbstractCarModel {

    /** 启动 */
     protected abstract void start();

    /** 停止 */
    protected abstract void stop();

    /** 按喇叭 */
    protected abstract void alarm();

    /** 引擎发出声音 */
    protected abstract void engineBoom();

     /** 是否让喇叭响 */
    protected abstract boolean isAlarm();

    /**
     * 模板方法
     * 出发
     * final修饰避免子类修改它的含义
     */
    final public void run() {
        //1.启动
        this.start();
        //2.鸣笛
        if(this.isAlarm())
            this.alarm();
        //3.引擎轰鸣
        this.engineBoom();
        //4.停车
        this.stop();
    }

}
复制代码

子类1:【奥迪汽车】

复制代码
package com.designer.designerdemo.template;

public class AudiCarModel extends AbstractCarModel {

    @Override
    protected void start() {
        System.out.println("汽车2启动===");
    }

    @Override
    protected void stop() {
        System.out.println("汽车2停止===");
    }

    @Override
    protected void alarm() {
        System.out.println("汽车2鸣笛===");
    }

    @Override
    protected void engineBoom() {
        System.out.println("汽车2引擎轰鸣===");
    }

    @Override
    protected boolean isAlarm() {
        return true;
    }
}
复制代码

测试

复制代码
package com.designer.designerdemo;

import com.designer.designerdemo.template.AbstractCarModel;
import com.designer.designerdemo.template.BwmCarModel;
import com.designer.designerdemo.template.AudiCarModel;

public class Test {

    public static void main(String[] args) {
        BwmCarModel car = new BwmCarModel();
        car.run();
    }
}
复制代码

 

 
posted @   Peter.Jones  阅读(19)  评论(0编辑  收藏  举报
编辑推荐:
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
历史上的今天:
2018-10-11 项目启动报错" Failed to bind NettyServer on /172.16.10.87:28078, cause: Failed to bind to: /0.0.0.0:28078"
点击右上角即可分享
微信分享提示