建造者模式(builder pattern)比较简单,它属于建立型模式的一种,将一个复杂的对象分解成多个简单的对象来进行构建,将复杂的构建层与表示层分离,使得相同的构建过程能够建立不一样的表示的模式即是建造者模式。ui
须要生成的对象具备复杂得内部结构;且内部属性自己相互依赖this
建造者模式主要有4个部分:product产品类、Builder建造者类、Director指挥者类、客户。code
咱们来看一下相应的代码:
产品类为一辆加工的空壳汽车。对象
/** * 产品类:car 目前须要构建一辆车。 */ function car () { this.name = '', this.number = '', this.wheel = '', this.engine = '' }
接下来看一下建造者类:get
/* * 建造者类,里面有专门负责各个部分的工人 */ function carBuilder () { this.nameBuilder = function () { this.name = '很厉害的车' }, this.numberBuilder = function () { this.number = '88888888' }, this.wheelBuilder = function () { this.wheel = '高级橡胶作的轮子' }, this.engineBuilder = function () { this.engine = '很厉害的引擎' }, this.getCar = function () { var Car = new car() Car.name = this.name; Car.number= this.number; Car.wheel = this.wheel; Car.engine = this.engine; return Car; } }
再这里咱们能够看到各个部分的工人以及他们的工做,他们的各自的工做最终合并成一辆汽车。产品
指挥者类:io
/** * 指挥者类,指挥各个部分的工人工做 */ function director () { this.action = function (builder) { builder.nameBuilder(); builder.numberBuilder(); builder.wheelBuilder(); builder.engineBuilder(); } }
最后就是使用方法:console
/** * 使用方法 */ var builder = new carBuilder(); var director = new director(); director.action(builder); var Car = builder.getCar(); console.log(Car);
最终客户经过getCar方法获得了这辆车,而且不须要知道其中得建造细节。function
建造者模式主要用于“分布构建一个复杂的对象”,它很容易进行扩展。若是有新的需求,经过实现一个新的建造者类就能够完成,而且建造者模式解耦了对象自己与构建过程,使得咱们不用关心具体的建造过程。扩展