前端设计模式应用--构造器模式

141 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第4天

介绍

  • 构造器模式也叫做建造者、生成器模式。其核心思想就是将复杂对象的构建与它的表示分离,使得同样的构建可以创建不同的表示。
  • 建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

使用场景

那么构造器模式适用的场景总结:适用于给定一个基础模板,可以配置多个参数,从而得到不同的结果。也就是说能够在此基础模板的基础上配置自己想要显示的模板样式。

  • 需要生成的对象具有复杂的内部结构

  • 需要生成的对象内部属性本身相互依赖

应用实践

职责明确

  • builder:为创建一个产品对象的各个部件指定抽象接口。

  • ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并提供一个检索产品的接口。

  • Director:构造一个使用Builder接口的对象。

  • Product:表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。

实现

// Product 
public class Product1 {
    constructor(name) {
        this.name = name;
    }
}

public class Product2 {
    constructor(name) {
        this.name = name;
    }
}



// builder 声明接口
abstract class Builder {
    public abstract create(): void;
}

//ConcreteBuilder
class Product1Builder extends Builder {
    private name;
    publick create() {
        const product1 = new Product1('产品1')
        console.log('生成:' + product1.name)
    }
}

class Product2Builder extends Builder {
    private name;
    publick create() {
        const product2 = new Product2('产品2')
        console.log('生成:' + product2.name)
    }
}

// Director
public class Director {
    public void gotoBuild(builder) {
        builder.create();
    }
}

//生成建筑者
const product1Builder = new Product1Builder()
const product2Builder = new Product2Builder()

//生成指挥长
const director = new Director()

//指挥建筑产品1
director.gotoBuild(product1Builder)

//指挥建筑产品2
director.gotoBuild(product2Builder)

汇总

Builder模式在应用过程中可以根据需求需要改变,如果创建的产品类只有一种,只需要一个具体建造者,可以省略抽象建造者,甚至可以去除指挥者的角色。

建造者模式主要用于“分布构建一个复杂的对象”,它很容易进行扩展。

如果有新的需求,通过实现一个新的建造者类就可以完成,并且建造者模式解耦了对象本身与构建过程,使得我们不用关心具体的建造过程。

优点

  • 各个具体的构建器都是相互独立的, 利于系统的扩展。

  • 客户端不必知道具体产品内部的实现。

  • 建造者独立,易扩展。

  • 便于控制细节风险。

缺点

  • 产品组成部分必须要相同, 限制了使用范围。
  • 假如产品内部变化复杂, 会增加更多的建造者类。