5.建造者模式
1.概述
建造者模式属于对象的创建模式。可以将一个产品的内部表象(属性)与产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。
在大部分情况下都可以使用new关键字或者工厂模式来创建对象,但是有些对象却比较复杂,比如某景区的旅游套票分为:普通成年人、退休老人、半价儿童、军人及家属等,他们有不同的优惠规定。如果通过new或工厂模式来创建对象,参数太多、对象复杂,会造成不便。构建套票所需数据很复杂,导致套票对象的构建难以进行。
为了处理这个问题,Builder模式出现了。Builder模式是一种分步构建对象的模式。以旅游套票为例,分布完成流程如下:
- 构建普通成年人票。
- 构建退休老人票。
- 构建半价儿童票。
- 构建军人及其家属票。
用一个配置类对这些步骤统筹,然后将所有信息交给构建器来完成对象的构建。如下图所示。
显然这里的构建不再复杂,我们只是由配置类一次性构建一种票,步步推进,当所有票都已经构建结束,通过构建起来构建套票对象。
2.Builder模式实例
我们来简单模拟一个Builder模式。先创建一个配置类,TicketHelper类,用它来一步步完成构建对象。
public class TicketHelper {
public void buildAdult(String info){
System.out.println("构建成年人票逻辑:"+info);
}
public void buildElderly(String info){
System.out.println("构建退休老人票逻辑:"+info);
}
public void buildChild(String info){
System.out.println("构建半价儿童票逻辑:"+info);
}
public void buildSolder(String info){
System.out.println("构建军人及家属票逻辑:"+info);
}
}
用println语句代替相应的处理逻辑。然后创建一个套票的构建类。它只有一个配置类的参数,通过它可以得到所有套票的信息,从而构建套票对象。
public class TicketBulider {
public static Object builder(TicketHelper helper){
System.out.println("通过TicketHelper构建套票信息");
return null;
}
}
有上面两个类,就可以进行测试了,用如下代码完成套票对象的构建。
public void test(){
TicketHelper helper=new TicketHelper();
helper.buildAdult("成人票");
helper.buildChild("半价儿童票");
helper.buildElderly("退休老人票");
helper.buildSolder("军人及家属票");
Object ticket=TicketBulider.builder(helper);
}
这就是Buildder模式的使用。把建造(构建)分为若干步,通过一步步构建信息,把一个复杂的对象构建出来。
运行结果如下。