zoukankan      html  css  js  c++  java
  • Builder模式


    /**抽象Product
    * Created by marcopan on 17/10/23.
    */
    public abstract class CarModel {
        private List<String> sequence = new ArrayList<String>();

    protected abstract void start();
    protected abstract void stop();
    protected abstract void alarm();
    protected abstract void engineBoom();

    final public void run() {
    for (int i = 0; i < this.sequence.size(); i ++) {
    if ("start".equalsIgnoreCase(this.sequence.get(i))) {
    this.start();
    } else if ("stop".equalsIgnoreCase(this.sequence.get(i))) {
    this.stop();
    } else if ("alarm".equalsIgnoreCase(this.sequence.get(i))) {
    this.alarm();
    } else if ("engine boom".equalsIgnoreCase(this.sequence.get(i))) {
    this.engineBoom();
    }
    }
    }

    final public void setSequence(List<String> sequence) {
    this.sequence = sequence;
    }

    final public List<String> getSequence() {
    return sequence;
    }
    }

    /**抽象builder
    * Created by marcopan on 17/10/23.
    */
    public interface CarBuilder {
    public abstract void setSequence(List<String> sequence);
    //设置完毕顺序后,就可以直接拿到这个车辆模型了
    public abstract CarModel getCarModel();
    }

    /**concrete builder
    * Created by marcopan on 17/10/23.
    */
    public class BMWBuilder implements CarBuilder {
    private CarModel bmw = new BMWModel();

    @Override
    public void setSequence(List<String> sequence) {
    this.bmw.setSequence(sequence);
    }

    @Override
    public CarModel getCarModel() {
    return this.bmw;
    }
    }

    public class BenzBuilder implements CarBuilder {
    private CarModel benz = new BenzModel(); //奔驰车模型

    @Override
    public void setSequence(List<String> sequence) {
    this.benz.setSequence(sequence);
    }

    @Override
    public CarModel getCarModel() {
    return this.benz;
    }
    }

    public class Director {
    private List<String> sequence = new ArrayList<String>();
    private CarBuilder benzBuilder = new BenzBuilder();
    private CarBuilder bmwBuilder = new BMWBuilder();

    //A顺序的奔驰车
    public CarModel getABenzModel() {
    this.sequence.clear();
    this.sequence.add("start");
    this.sequence.add("stop");
    this.benzBuilder.setSequence(sequence);
    return this.benzBuilder.getCarModel();
    }

    //B顺序的奔驰车
    public CarModel getBBenzModel() {
    this.sequence.clear();
    this.sequence.add("engine boom");
    this.sequence.add("start");
    this.sequence.add("stop");
    this.benzBuilder.setSequence(sequence);
    return this.benzBuilder.getCarModel();
    }

    //C顺序的宝马车
    public CarModel getCBMWModel() {
    this.sequence.clear();
    this.sequence.add("start");
    this.sequence.add("alarm");
    this.sequence.add("stop");
    this.bmwBuilder.setSequence(sequence);
    return this.bmwBuilder.getCarModel();
    }

    //D顺序的宝马车
    public CarModel getDBMWModel() {
    this.sequence.clear();
    this.sequence.add("engine boom");
    this.sequence.add("start");
    this.bmwBuilder.setSequence(sequence);
    return this.bmwBuilder.getCarModel();
    }
    }

    public class Client {
    public static void main(String[] args) {
    Director director = new Director();

    director.getABenzModel().run();
    director.getBBenzModel().run();
    director.getCBMWModel().run();
    }
    }
  • 相关阅读:
    MySQL启动报错Starting MySQL. ERROR! The server quit without updating PID file
    vue安装
    web漏洞分析防御
    dedecms三级目录
    阿里云Linux服务器漏洞修复
    Windows下elasticsearch安装并且同步数据库
    解决ecshop清除缓存css样式没反应问题
    PHP正则匹配替换图片地址
    阿里云漏洞修复
    Apache Pig
  • 原文地址:https://www.cnblogs.com/panning/p/7747725.html
Copyright © 2011-2022 走看看