模板方法模式
顶层设计: 抽象类 【 汽车模型】
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(); } }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!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"