设计模式(6)-建造模式

建造模式是什么?

建造模式是一种创建对象的方式,通过使用建造模式,可以将对象的内部状态表示和对象的创建过程分割开。

某些情况下对象内部的状态必须在一定的规则约束下才有意义,典型的几种情况如下: (1)对象内部的多个属性字段要同时有效。比如:创建一封电子邮件,需要填好发件人、收件人、主题、内容等,才能作为一封完整的邮件。而填写过程,可以用专门的建造方法来负责实现,其返回的结果是一个有效的邮件对象。 (2)对象需要按照一定的顺序创建。比如组装汽车,要先组装内部的器件:发动机、变速箱、车轮、座椅等,再组装外部车身。

简单来说,这些情况下对象的创建流程比较复杂,而且和对象内部的实现细节高度相关。因此,创建的责任应该交由对象的提供者,而不是使用者,因为使用者不知道对象的内部实现,而且也不应该知道。这时产品的提供者就可以使用建造模式,提供建造类和建造方法,供用户使用。

建造模式类图的一种形式如下:

https://s3.bmp.ovh/imgs/2021/10/ab08ab19659f9f85.jpeg

从类图中可以看到,本来属于Product的内部性质零件Part1和Part2的建造被放到ConcreteBuilder中,这是一种“性质外部化”,将部分状态的设置放到外部类中,这样,Product的属性可以更加通用、单一,具体的业务需求对应的产品生产流程,作为一个频繁变化的点,交由builder处理,将变化点(构建流程)统一存放,这样能很好地控制需求变化代码的软件修改复杂度。

构建模式 vs 抽象工厂模式

构建模式和抽象工厂模式非常相似,它们的区别在于:

  • 抽象工厂模式中的工厂返回的是一个完整的对象,核心关注点是产品品类的不断增加。
  • 构建模式中的构造类是一步一步完成对象的创建的,核心关注点是产品创建的流程/规则的变化。

参考

《Java与模式》第19章