作为创建型的模式,肯定是创建对象等时候用的.
联系到实际,就是一个javaBean 如果想获取一个完整的对象, 需要为属性挨个赋值.
这样如果连续创建多个对象的时候, 重复代码 及代码量明显太多了
这时候就应该抽象出来一个 创建对象的接口,或者抽象类 每一类对象一个实现类.
在创建一个控制类. 里面调用接口的每一个方法, 同时返回创建好的对象.
eg: 手机套餐 多种套餐: 套餐包含 通话时间 和流量
javaBean :
public Class SJtc {
String thsj;// 通话时间
String ll; 流量
get();
set();
}
正常如果构建套餐. 直接 Sjtc sjtc = new Sjtc(); sjtc.setThsj()... 这样写
接下来换一个实现方式:
public abstrac class SjcBuilder {
Sjtc sjtc = new Sjtc();
abstract void setThsj();
abstract void setLl();
getSJtc{
return this.sjtc;
}
}
// 具体套餐实现类:
public ASjtc extends SjcBuilder {
void setThsj(){
sjtc.setThsj("123123");
}
void setLl(){
sjtc.setLl("123123");
}
}
再写一个控制类调用 抽象类所有方法;
puclic class control{
SjcBuilder builder;
public control(buider){
this.builder = builder;
}
Sjrc getTc(){
builder.setThsj();
builder.setLl();
return builder;
}
}
这样调用的时候 这样就好了
control control = new control(new ASjtc());
control.getTc();
调用者不用关心 a套餐都需要什么?
把抽象类 换成接口是一样的. 创建对象可以放在builde里面.
但是注意 使用完之后置空
public void createDoppelganger(String name){ doppelganger = new Doppelganger(name); } public Doppelganger getDoppelganger(){ try { return doppelganger; }finally{ doppelganger = null; } }
总体而言 建造者模式 跟工厂模式相比, 多了一个控制类, 用来控制对象的创建. 同时建造者模式 是关注的创建的过程.为了减少中间创建对象代码
在实际工作中 完全是有利用价值的,但是因为例子中 各个实现类的参数都是已知的. 在实际中可能是变化的, 这样可以在java bean加一个方法.来处理这些,只要规则一置就好了