五、Bulide(建造者模式)
是将一个复杂的对象的构建与它的表示分离(同构建不同表示),使得同样的构建过程可以创建不同的表示。
5.1建造者模式通常包括下面几个角色:
①Builder:一个抽象接口,用来规范产品对象的各个组成成分的建造。
② ConcreteBuilder:实现Builder接口,针对不同的商业逻辑,具体化复杂对象的各部分的创建,在建造过程完成后,提供产品的实例。
③ Director:指导者,调用具体建造者来创建复杂对象的各个部分,不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建。
④ Product:要创建的复杂对象。
与抽象工厂的区别:在建造者模式里,有个指导者,由指导者来管理建造者,用户是与指导者联系的,指导者联系建造者最后得到产品。即建造模式可以强制实行一种分步骤进行的建造过程。
5.2举例:
//Product和产品的部分Part接口
publicinterface product { }
publicinterface part{ }
Builder:规范产品对象的各个组成部分的建造
publicinterface Builder {
voidbuildPartOne();
voidbuildPartTwo();
ProductgetProduct();
}
ConcreteBuilder:实现Buider接口,针对不同的商业逻辑,具体化复杂对象的各个部分的常见,在创建完成后,提供产品的实例。
//具体建造工具
public classConcreteBuilder implements Builder {
Part partOne,partTwo;
public voidbuildPartOne() {
//具体构建代码
};
public voidbuildPartTwo() {
//具体构建代码
};
public ProductgetProduct() {
//返回最后组装的产品
};
}
Director:
publicclass Director {
privateBuilder builder;
publicDirector( Builder builder ) {
this.builder= builder;
}
publicvoid construct() {
builder.buildPartOne();
builder.buildPartTwo();
}
}
建造:
ConcreteBuilderbuilder = new ConcreteBuilder();
//获取建造的指导者。
Directordirector = new Director(builder);
//开始各部分建造
director.construct();
//获得产品
Productproduct = builder. getProduct ();
优点:
l 客户端不必知道产品内部组成的细节。
l 具体的建造者类之间是相互独立的,对系统的扩展非常有利。
l 由于具体的建造者是独立的,因此可以对建造过程逐步细化,而不对其他的模块产生任何影响。
使用场合:
l 创建一些复杂的对象时,这些对象的内部组成构件间的建造顺序是稳定的,但是对象的内部组成构件面临着复杂的变化。
l 要创建的复杂对象的算法,独立于该对象的组成部分,也独立于组成部分的装配方法时。
android中的Dialog就使用了Builder Pattern,下面来看看AlertDialog的部分源码。