【JavaScript设计模式】创建型设计模式--建造者模式

来源:互联网 发布:放逐之城v4.5数据 编辑:程序博客网 时间:2024/06/05 10:30

       建造者模式:可以将一个复杂对象的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。也就是说如果我们用了建造者模式,那么用户就需要指定需要建造的类型就可以得到他们,而具体建造的过程和细节就不需要知道了。建造者模式实际,就是一个指挥者,一个建造者,一个使用指挥者调用具体建造的工作得出结果的客户。

1、建造者模式四要素

     1)产品类Product:一般是一个较为复杂的对象,也就是说创建对象的过程比较复杂,一般会有比较多的代码量。
     2)抽象建造者类Builder: 将建造的具体过程交与它的子类来实现,这样更容易扩展。
     3)建造者类ConcreteBuilder: 组建产品;返回组建好的产品。
     4)指导类Director: 负责调用适当的建造者来组建产品,指导类一般不与产品类发生依赖关系,与指导类直接交互的是建造者类。

2、举例:场景模拟

     说一户家人要建房子,但房子主人或家里其他人是不懂得如何去建房子的,所以他得去请几个工人,这个建房子的队伍还得有个工头,来按房主人的想法来建一套房子,工头按房主人的要求设计要求工人如何如何做;

     工头说,第一步先把房整体骨架搭起来,第二步睡房建造好,第三步把厨房装饰好,第四步把客厅建造装饰完毕,第五步...
     工头是不做事的,但具体建造者必须按照工头的要求来做,第一步,第二步的这样步骤来建造,直至整个房子完成;
     创建者必须要有创建这个房屋的所有技能,即建骨架,装饰睡房等...,即建造者所做的事,或所具有的能力,必须大于或等于指挥者要求要做的事,或具有的能力;
     即指挥者是个组织者,而建造者提供技能;

    代码实现:

function House(){this.Bedroom = '';this.Livingroom = '';this.Kitchen = '';}function Director(){this.construct = function(houseBuilder){houseBuilder.jian_Bedroom();houseBuilder.jian_Livingroom();houseBuilder.jian_Kitchen();}}function houseBuilder(){this.jian_Bedroom = function(){console.log('The bedroom has been built!');}this.jian_Livingroom = function(){console.log('The living room has been built!');}this.jian_Kitchen = function(){console.log('The kitchen has been built!');}this.getResult = function(){var house = new House();house.Bedroom = 'ok';house.Livingroom = 'ok';house.Kitchen = 'ok';return house;}}var houseBuilder = new houseBuilder;var director = new Director;director.construct(houseBuilder);var myhouse = houseBuilder.getResult();console.log(myhouse);
3、建造者模式优点以及作用

优点:

  1. 建造者模式的封装性很好。使用建造者模式可以有效的封装变化,在使用建造者模式的场景中,一般产品类和建造者类是比较稳定的,因此,将主要的业务逻辑封装在指导者类中对整体而言可以取得比较好的稳定性。
  2. 建造者模式很容易进行扩展。如果有新的需求,通过实现一个新的建造者类就可以完成。

作用:

  1. 分布创建一个复杂的对象;
  2. 解耦封装过程和具体创建的组件;
  3. 无需关心组件如何组装。


原创粉丝点击