js 设计模式——建造者模式

定义

将一个复杂对象的构建与它的实例分离,使得同样的构建过程可以创建不同的实例。

建造者模式实现

比如你打算装修一个房子,首先你会找到开发商提出你的需求

/**
  * @information: 业主
  */
  class Owner {
    constructor (need){
      this.need = need || [];
    }

    getNeed() {
      return this.need;
    }
  }

然后开发商会根据你的需求去找设计师设计图纸

  /**
  * @information: 开发商
  */
  class Developer {
    constructor(need) {
      this.need = need || [];
      console.log("我需要这样的房间:"+need);
    }

    construct() {
      console.log("开始建造");
      let workerOk = this.need.map(el => {
        let builder = new CreatDiagram();
        builder.build(el);
        return builder.getResult();
      });

      console.log("房子不错");
      console.log(workerOk);
    }
  }
  /**
  * @information: 设计图抽象类
  */
  class Diagram {
    constructor(){
      console.log("拿到图纸");
    }
    build (partName){
      console.log(`观察${partName}图纸`);
    }
  }

拿到图纸之后,再招工人

  /**
  * @information: 工人类
  */
  class Worker {
    constructor (material) {
      console.log(`我建造了${material}`);
      this.data = material;
    }
  }

  /**
  * @information: 设计图实现
  */
  class CreatDiagram extends Diagram {
    constructor() {
      super();
    }

    build (partName) {
      super.build(partName);
      console.log(`建造开始${partName}`);
      this.worker = new Worker(partName);
    }

    getResult() {
      console.log("完工");
      return this.worker;
    }
  }

最后就开始装修了

let owner = new Owner([‘卧室‘, ‘厨房‘, ‘客厅‘]);
let home = new Developer(owner.getNeed());
home.construct();

具体打印结果如下

js 设计模式——建造者模式

 

建造者模式的优缺点

优点

  • 在建造者模式里,不需要知道建造的过程是怎么样的,创建的实例会与过程解耦。
  • 建造者模式里可以根据不同的具体实现来得到不同的实例。
  • 每个具体的建造类都相对独立,方便替换和新增。

缺点

  • 如果类内部的差异比较大,或者变化复杂的话,会增加很多对应的实现类,使得代码比较臃肿。

总结

建造者模式返回的是各种类组装好的一个对象,各有各的应用场景,建造者模式可以比较适用那些有固定生成顺序的对象。

js 设计模式——建造者模式

上一篇:CSS inset属性


下一篇:PHP 判断远程文件是否存在