• 建造者模式


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

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

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

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

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

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

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

  • 相关阅读:
    Objective-C中不同方式实现锁(二)-11-多线程
    共享资源加锁的操作方法-10-多线程
    ios 下锁使用- 09-多线程
    iOS开发-线程安全-09-多线程
    线程同步-iOS多线程编程指南(四)-08-多线程
    《GCD 实现同步锁》-07-多线程
    死锁-06-多线程
    生产者消费者问题-05-多线程
    递归锁+条件锁+互斥锁-04-多线程
    Android开发技术周报 Issue#62
  • 原文地址:https://www.cnblogs.com/sstone/p/8471789.html
Copyright © 2020-2023  润新知