JavaScript设计模式之建造者模式介绍
建造者模式(Builder Pattern)是一种创建型设计模式,它提供了一种创建对象的最佳方式。在建造者模式中,一个复杂对象的构造被分解为多个简单的步骤,并且允许使用相同的构造过程创建不同的表示。这种方式非常适用于对象的构造过程需要多个步骤,且这些步骤可以被顺序化。 建造者模式主要包含以下几个角色: 1. Builder(建造者):这是一个抽象接口,定义了创建产品各个组件的方法,例如buildPartX、buildPartY等。它用于定义产品的构造过程,但是不具体实现。 2. ConcreteBuilder(具体建造者):Builder接口的实现类,用于实际构造和装配各个产品的部件,生成最终的产品实例。具体建造者知道如何准备和装配各个部件,最终返回一个完整的产品对象。 3. Director(指挥者):它负责指导如何构建产品,控制构建过程的顺序,并与Builder接口进行交互。指挥者通常包含一个构建方法,该方法接受一个Builder类型的参数,然后按照特定的顺序调用Builder的方法来创建产品。 4. Product(产品):最终被构造出来的复杂对象。 在JavaScript中,由于其是一种弱类型语言,所以没有严格的接口定义。在实现建造者模式时,可以忽略接口定义这一层,直接创建具体的建造者类和指导类。下面是一个建造者模式的实际应用场景和示例代码: 场景模拟:建造一座房子。房主不懂建房子的细节,但有大致的建房要求。于是房主雇佣了一个建筑队和一个工头。工头根据房主的要求,指挥建筑工人按顺序完成房子的各个部分。工人是建造者,工头是指挥者,房子是产品。 示例代码: 1. 创建具体建造者类`WorkerBuilder`: ```javascript function WorkerBuilder() { this.workOne = function() { // 建房子骨架 }; this.workTwo = function() { // 建睡房 }; this.workThree = function() { // 建厨房 }; this.workFour = function() { // 建客厅 }; // this.getResult = function() { // 建成房子 // var house = new House(); // return house; //}; this.getResult = function() { var house = new House(); house.HouseFrame = '骨架'; house.Room = '睡房'; house.Kitchen = '厨房'; house.LivingRoom = '客厅'; return house; }; } ``` 2. 创建指挥者类`Director`: ```javascript function Director() { this.construct = function(builder) { builder.workOne(); builder.workTwo(); builder.workThree(); builder.workFour(); // 上面的内容,顺序可设置,并且工作项也可以设定 }; } ``` 3. 创建产品类`House`: ```javascript function House() { this.HouseFrame = ''; this.Room = ''; this.Kitchen = ''; this.LivingRoom = ''; } ``` 4. 使用方法: ```javascript var builder = new WorkerBuilder(); var director = new Director(); director.construct(builder); var house = builder.getResult(); ``` 整个使用过程相当于客户(房主人)雇佣了一个工头(指挥者)来建房子,但是工头不亲自执行建房子的具体工作,而是指挥工人(建造者)去建造。最后房主人从工人那里取得建好的房子。 建造者模式特别适合用于以下场景: - 创建的对象内部结构比较复杂,需要多个步骤进行构造。 - 创建过程需要允许有不同的表示,即相同构建过程需要创建不同的产品对象。 - 产品对象的创建过程必须允许被顺序化,即部件的创建和装配有明确的顺序要求。 通过建造者模式,可以有效地隔离复杂对象的构建代码和表示代码,使系统更具有模块化。此外,还可以为创建过程引入更多的灵活性,如可以控制构建过程中的各个步骤,从而实现不同的产品变体。
- 粉丝: 1
- 资源: 915
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助