模板方法模式

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

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();
    }
}

 

 
上一篇:上位机开发之 SQL server数据库学习


下一篇:c#访问修饰符