设计模式之模板方法
来源:互联网 发布:为什么python国内不火 编辑:程序博客网 时间:2024/05/16 14:43
描述:奔驰宝马的设计首先要设计出车辆模型,然后再去做其他事情,车辆模型好比就是模板,例如奔驰与宝马基本的功能,启动,引擎,停止,喇叭等都一样,但是具体的实现上会有差别,模板方法就是有这样一个抽象类,抽象类中定义一些一般方法(启动,引擎,停止,喇叭),还包括模板方法,模板方法相当于对一般方法调用顺序的算法。
UML类图:
测试代码如下:
1、抽象模板类
package com.java.template;public abstract class HummeModel {public boolean isAlarm = true;protected abstract void alarm();protected abstract void start();protected abstract void stop();protected abstract void engine();public void run(){start();engine();if(isAlarm()){alarm();}stop();}protected boolean isAlarm(){return isAlarm;}}
2、抽象模板继承类
package com.java.template;public class ConcreteHummeModel1 extends HummeModel {@Overridepublic void alarm() {System.out.println("悍马1发出叮叮的铃声...");}@Overridepublic void start() {System.out.println("悍马1开始跑起来了...");}@Overridepublic void stop() {System.out.println("悍马1正在停下来...");}@Overridepublic void engine() {System.out.println("悍马1引擎启动了...");}public void setAlarm(boolean isAlarm) {this.isAlarm = isAlarm;}}
package com.java.template;public class ConcreteHummeModel2 extends HummeModel {@Overridepublic void alarm() {System.out.println("悍马2发出咚咚的铃声...");}@Overridepublic void start() {System.out.println("悍马2开始跑起来了...");}@Overridepublic void stop() {System.out.println("悍马2正在停下来...");}@Overridepublic void engine() {System.out.println("悍马2引擎启动了...");}public void setAlarm(boolean isAlarm) {this.isAlarm = isAlarm;}}
3、测试类
package com.java.template;public class HummeModelTest {public static void main(String[] args) {//悍马1有铃声,悍马2设置无铃声ConcreteHummeModel1 model1 = new ConcreteHummeModel1();model1.setAlarm(true);model1.run();ConcreteHummeModel2 model2 = new ConcreteHummeModel2();model2.setAlarm(false);model2.run();}}
4、测试结果
悍马1开始跑起来了...悍马1引擎启动了...悍马1发出叮叮的铃声...悍马1正在停下来...悍马2开始跑起来了...悍马2引擎启动了...悍马2正在停下来...
0 0
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法模式模板方法模式
- Java设计模式之模板方法模式
- FreeRTOS事件组之事件组置位(xEventGroupSetBits)
- 分布式架构学习之:026--Dubbo服务只注册
- 【Java】多文件压缩下载(调用浏览器下载)
- 【小练习05】HTML+CSS--淘宝商铺小页面
- 论文阅读:3D exemplar-based random walks for tooth segmentation from cone-beam computed tomography images
- 设计模式之模板方法
- 关于读题的一些技巧
- CentOs 6.5安装telnet和xinetd一句话介绍
- Problem C: 让动物们叫起来吧!
- mysql数据库数据类型
- 程序员必须知道的10大基础实用算法
- HashMap、HashTable和ConcurrentHashMap的区别
- 关于order by 在子查询中能否使用
- 04-python学习笔记:函数-参数传递