设计模式之创建者模式

102 阅读2分钟

什么是创建者模式

Builder构建器模式也被称为生成器模式,是一种创建型设计模式, 分离复杂对象的创建和表示。简单理解就是内部有许多“小工厂”创建对象,最终来组建一个完全体。 创建者模式让我想起来很早之前的一部动画片《战神金刚》,组成脚和腿,组成躯干,我来组成头部。

生成器.png

创建者模式使用场景

  1. 同样的创建过程,可以创建出不同的表示结果。
  2. 创建这个对象的步骤比较多,每个步骤都需要一个零部件,最终组合成一个完整的对象。

总结就是创建复杂对象时可以使用创建者模式。

创建者的优缺点

创建者的优点

  1. 良好的封装性,可读性强。
  2. 易于扩展,生成不同形式的产品时, 你可以复用相同的制造代码。
  3. 便于控制风险,符合单一职责原则将复杂构造代码从产品的业务逻辑中分离出来。

创建者的缺点

该模式需要新增多个类, 因此代码整体复杂程度会有所增加。

创建者的实现

import java.util.ArrayList;
import java.util.List;

/**
 * 战神金刚
 */
public class Voltron {
    /**
     * 头部
     */
    public String head;
    /**
     * 脚和腿
     */
    public String feetAndLegs;
    /**
     * 躯干
     */
    public String body;
    /**
     * 步骤
     */
    public List<String> step = new ArrayList<>();

    @Override
    public String toString() {
        return String.join("->", step);
    }
}

interface VoltronBuilder {
    /**
     * 组成头部
     *
     * @param head 头部
     * @return this
     */
    public VoltronBuilder buildHead(String head);

    /**
     * 脚和腿
     *
     * @param feetAndLegs 脚和腿
     * @return this
     */
    public VoltronBuilder buildFeetAndLegs(String feetAndLegs);

    /**
     * 躯干
     *
     * @param body 躯干
     * @return this
     */
    public VoltronBuilder buildBody(String body);

    /**
     * 构建战神金刚
     *
     * @return 站神
     */
    public Voltron build();

}

/**
 * 简单构建
 */
class SimpleVoltronBuilder implements VoltronBuilder {
    Voltron voltron;

    public SimpleVoltronBuilder(Voltron voltron) {
        this.voltron = voltron;
    }

    @Override
    public VoltronBuilder buildHead(String head) {
        this.voltron.head = head;
        this.voltron.step.add(head);
        return this;
    }

    @Override
    public VoltronBuilder buildFeetAndLegs(String feetAndLegs) {
        this.voltron.feetAndLegs = feetAndLegs;
        this.voltron.step.add(feetAndLegs);
        return this;
    }

    @Override
    public VoltronBuilder buildBody(String body) {
        this.voltron.body = body;
        this.voltron.step.add(body);
        return this;
    }

    @Override
    public Voltron build() {
        return this.voltron;
    }

    public static void main(String[] args) {
        Voltron voltron = new SimpleVoltronBuilder(new Voltron())
                .buildFeetAndLegs("组成脚和腿")
                .buildBody("组成躯干")
                .buildHead("我来组成头部")
                .build();
        System.out.println(voltron.toString());

    }
}

总结

创建者模式和模板方法模式极其相似,创建者模式强调的是对象的创建,模板方法模式强调的是方法的执行。创建者模式和工厂模式的区别,创建者模式侧重于产品的类型和创建顺序,工厂模式侧重于创建产品。