设计模式之模板方法

来源:互联网 发布:为什么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
原创粉丝点击