天天看点

java设计模式4--建造者模式(Builder)

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

当系统准备为用户提供一个内部结构复杂的对象时,就可以使用生成器模式,使用该模式可以逐步地构造对象,使得对象的创建更具弹性。生成器模式的关键是将一个包含有多个组件对象的创建分成若干个步骤,并将这些步骤封装在一个称作生成器的接口中。

适用性

1.当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。

2.当构造过程必须允许被构造的对象有不同的表示时。

参与者

1.builder 为创建一个product对象的各个部件指定抽象接口。

2.concretebuilder 实现builder的接口以构造和装配该产品的各个部件。 定义并明确它所创建的表示。 提供一个检索产品的接口。

3.director 构造一个使用builder接口的对象。

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

模式的结构中包括四种角色:

•产品(product)

•抽象生成器(builder)

•具体生成器(concretebuilder)

•指挥者(director) 

模式的uml类图

java设计模式4--建造者模式(Builder)

【例1】:创建含有按钮、标签和文本框组件的容器。不同用户对容器有不同的要求,比如某些用户希望容器中只含有

按钮和标签,某些用户希望容器只含有按钮和文本框等。另外用户对组件在容器中的顺序位置也有不同的要求,比如某些用户要求组件在容器中从左至右的排列顺序

是按钮、标签、文本框,而某些用户要求从左至右的排序时标签、文本框、按钮。 

模式的结构的描述与使用

1.产品(product): panelproduct.java

2.抽象生成器(builder): builer.java

3.具体生成器(concretebuilder)_1 : concretebuilderone.java

3.具体生成器(concretebuilder)_2 : concretebuildertwo.java

4.指挥者(director): director.java

5.应用 application.java

【例2】:构建一个男人的类,使得构建和表示分离

类图如下所示:

java设计模式4--建造者模式(Builder)

builder

concretebuilder

director

product

test

•生成器模式将对象的构造过程封装在具体生成器中,用户使用不同的具体生成器就可以得到该对象的不同表示。

•可以更加精细有效地控制对象的构造过程。生成器将对象的构造过程分解成若干步骤,这就使得程序可以更加精细,有效地控制整个对象的构造。

•生成器模式将对象的构造过程与创建该对象类解耦,使得对象的创建更加灵活有弹性。

•当增加新的具体生成器时,不必修改指挥者的代码,即该模式满足开-闭原则。