Welcome to Ray's Blog

Stay Hungry Stay Foolish - Steve Jobs

0%

Java建造者模式笔记

概述

建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式是一种对象创建型模式。

创建

建造者模式一步一步创建一个复杂的对象,它允许用户只通过制定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。

详解角色:

  • Builder(抽象建造者):它为创建一个产品 Product 对象的各个部件制定抽象接口,在该接口中一般声明俩类方法,一类方法为buildPartX(),它们用于创建复杂对象的各个部件;另一类方法是getResult(),它们用于返回复杂对象。Builder既可以是抽象类,也可以是接口。

  • ConcreteBuilder(具体建造者):它实现了Builder接口或者抽象类,实现了各个部件的具体构建和装配方法,定义并明确它所创建的复杂对象,也可以提供一个方法返回创建好的复杂产品对象。

  • Product(产品):被构建的复杂对象,包含多个组成部件,具体建造者创建该产品的内部表示并定义它的装配过程。

  • Director(指挥者):指挥者又称为导演类,它负责安排复杂对象的建造次序,指挥者与抽象建造者之间存在关联关系,可以在其construct()建造方法中调用建造者对象的部件构造和装配方法,完成复杂对象的建造。

总结

建造者模式的核心在于如何一步步构建一个包含多个组成部件的完整对象,使用相同的构建过程构建不同的产品,在软件开发中,如果我们需要创建复杂对象并希望系统具备很好的灵活性和可扩展性可以考虑使用创建者模式。

优点:

  • 在建造者模式中,客户端不必知道产品内部组成细节,将产品本身与产品的创建过程解耦,看似的相同的创建过程可以创建不同的产品对象;

  • 每一个具体建造者都相对独立,而与其他的具体建造者无关,因此可以很方便的替换具体建造者或者增加新的建造者,用户使用不同的具体建造者即可得到不同的产品。由于指挥者类针对抽象建造者编程,增加新的具体建造者无须修改原有类库的代码,系统扩展方便,符合“开闭原则”。

  • 可以更加精细地控制产品的创建过程。将复杂产品的创建步骤分解在不同的方法中,使得创建过程更加清晰,也更方便使用程序来控制创建过程。

缺点:

  • 建造者模式所建造的产品一般具有较多的共同点,其组成部分相似,如果产品之间的差异性很大,则不合适使用建造者模式;

  • 如果产品的内部变化复杂,可能会导致需要定义很多具体建造者类来实现这种变化,导致系统变得很庞大,增加系统的理解难度和运行成本。

使用场景:

  • 需要生成的产品对象有复杂的内部结构,这些产品对象通常包含多个成员属性;

  • 需要生成的产品对象的属性相互依赖,需要制定其生成顺序;

  • 对象的创建过程对于创建该对象的类。在建造者模式中通过引入的指挥者类,将创建过程封装在指挥者类内,而不在建造者类和客户类中。

  • 隔离复杂对象的创建和使用,并使得相同的创建过程可以创建不同的产品。

参考资源