zoukankan      html  css  js  c++  java
  • 建造者模式

    抽象建造者定义建造的零件方法和获取产品的方法,具体建造者实现这些方法。

    导演角色主要调用具体建造者角色用以创建产品对象

    产品角色是建造的最终产品,一般来说一个系统会有多于一个的产品类,而且这些产品类并不一定有共同的接口,可以完全是不相关联的。

    下面依然以造车示例建造者模式:

    public class BuilderDemo {
      static class Director {
        private Builder builder;
    
        public Car constructAccord() {
          builder = new AccordBuilder();
          builder.buildChassis();
          builder.buildEngine();
          builder.buildWheel();
          builder.buildTransmission();
          return builder.getProduct();
        }
      }
    
      static class Car {
        private String chassis;
        private String wheel;
        private String Engine;
        private String Transmission;
    
        public String toString() {
          StringBuilder sb = new StringBuilder();
          sb.append("发动机:" + this.getEngine()+"
    ");
          sb.append("轮胎:" + this.getWheel()+"
    ");
          sb.append("变速箱:" + this.getTransmission()+"
    ");
          sb.append("底盘:" + this.getChassis()+"
    ");
          return sb.toString();
        }
    
        public String getChassis() {
          return chassis;
        }
    
        public void setChassis(String chassis) {
          this.chassis = chassis;
        }
    
        public String getWheel() {
          return wheel;
        }
    
        public void setWheel(String wheel) {
          this.wheel = wheel;
        }
    
        public String getEngine() {
          return Engine;
        }
    
        public void setEngine(String engine) {
          Engine = engine;
        }
    
        public String getTransmission() {
          return Transmission;
        }
    
        public void setTransmission(String transmission) {
          Transmission = transmission;
        }
      }
    
      interface Builder {
        void buildChassis();
    
        void buildWheel();
    
        void buildEngine();
    
        void buildTransmission();
    
        Car getProduct();
    
      }
    
      static class AccordBuilder implements Builder {
    
        Car car = new Car();
    
        @Override
        public void buildChassis() {
          this.car.setChassis("好底盘");
        }
    
        @Override
        public void buildWheel() {
          this.car.setWheel("倍耐力轮胎");
        }
    
        @Override
        public void buildEngine() {
          this.car.setEngine("地球梦发动机");
        }
    
        @Override
        public void buildTransmission() {
          this.car.setTransmission("10AT变速箱");
        }
    
        @Override
        public Car getProduct() {
          return this.car;
        }
      }
    
      public static void main(String[] args) {
        Director director = new Director();
        Car accord = director.constructAccord();
        System.out.println("---生产出一辆雅阁---");
        System.out.println(accord.toString());
      }
    }

    建造者模式的导演者其实可以去除,如果只有一种构建的产品,那么其实也就不需要导演者这个角色了。

    去掉导演者角色的建造者设计模式其实就是“模板方法设计模式”

  • 相关阅读:
    HDU 5213 分块 容斥
    HDU 2298 三分
    HDU 5144 三分
    HDU 5145 分块 莫队
    HDU 3938 并查集
    HDU 3926 并查集 图同构简单判断 STL
    POJ 2431 优先队列
    HDU 1811 拓扑排序 并查集
    HDU 2685 GCD推导
    HDU 4496 并查集 逆向思维
  • 原文地址:https://www.cnblogs.com/sstone/p/8471789.html
Copyright © 2011-2022 走看看