设计模式-创建者模式-建造者模式

197 阅读3分钟

建造者模式

简单来说,这个模式也是和工厂模式差不多,都是创建东西的。只不过与工厂模式不同的是,工厂模式是创建的是一整个对象,而建造者模式创建的是对象中的一个个小零件,而不是对象本身。之后由构造者把这些零件组装起来,组合成一个完整的对象。

结构

建造者模式拥有以下四个结构

  1. 抽象建造者:该接口规定了要对复杂对象当中哪些零件进行创建,但是不涉及具体的创建过程
  2. 具体建造者:实现抽象建造者类,实现对复杂对象中零件的创建,在构造完成后,提供产品的实例。
  3. 产品类要创建的复杂对象
  4. 指挥者类调用具体建造者来创建复杂对象中的各个部分,进行组装,但是不涉及具体产品的信息,只负责保证对象各部分进行完整创建。

image.png

Ps:其中new产品类对象以及getResult()提供产品类实例的方法,可以集合在抽象产品类当中
上面是常规建造者模式,其中指挥者类用以指导具体的构建者如和构建产品,控制调用的先后次序,有些情况下需要简化系统结构,可以把指挥者类和抽象建造者进行结合。
在抽象建造者类中加一个组装的功能construct(),但是这样就不符合单一原则,如果contruct()过于复杂,建议还是封装在Director中
优点使用建造者模式,可以有效的封装变化组件的变化,在使用建造者模式的场景中,一般来说产品类和建造者类都是比较稳定的,因此将主要业务逻辑封装在指挥者类当中,可以取得比较好的稳定性。
同时可以将产品本身与创建过程进行解耦,使得相同的创建过程可以创建不同的产品对象,符合开闭原则.
不过建造者模式所创建的产品一般都是具有较多共同点,组成部分相似

工厂模式与创建者模式对比

工厂方法 VS 建造者模式

工厂方法模式注重的是整体对象的创建方式,而建造者模式注重的是部件构建的过程,意在通过一步一步地精确构造创建出一个复杂的对象。

抽象工厂 VS 建造者模式

抽象工厂模式实现对产品家族的创建,一个产品家族是这样的一系列产品:具有不同分类维度的产品组合,采用抽象工厂模式则是不需要关心构建过程,只关心什么产品由什么工厂生产即可。
建造者模式则是要求按照指定的蓝图建造产品,它的主要目的是通过组装零配件而产生一个新产品。

总结

工厂模式注重对象,建造者模式注重对象中部件的构建,因此可以将工厂模式与建造者模式进行结合,使用工厂模式来建造对象中的部件,再由建造者模式来进行组装。