1.builder: 创建一个product,为每个部件安排一个访问接口:
package com.buildertype.test;
public interface Builder{
public void fangYou();
public void fangYan();
public void fangZu();
Cai cook_cai();}
2.concretebuilder: 实现builder接口,以装配和构造product的各个部件,提供一个检索产品的接口:
package com.buildertype.test;public class ConcreteBuilder implements Builder {
Cai cai; //此处必须有这个Cai对象,因为部件的设定都要保存在它里面呢。
public ConcreteBuilder() {
cai = new Cai();
}
@Override
public void fangYou() {cai.setYou("fang you jin qu......");
}
@Override
public void fangYan() {
// TODO Auto-generated method stubcai.setYan("fang yan jin qu......");
}
@Override
public void fangZu() {
// TODO Auto-generated method stubcai.setZu("fang zu jin qu ......");
}
@Override
public Cai cook_cai() {
// TODO Auto-generated method stubreturn cai;
}
}
3.构造一个使用builder接口的对象,其中有一方法用来生成product:
package com.buildertype.test;
public class Director {
public Cai buildCai(Builder b) {
b.fangYou();
b.fangYan();
b.fangZu();
return b.cook_cai();}
}
4.表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程:
package com.buildertype.test;
public class Cai {
private String you;
private String yan;
private String zu;public String getYou() {
return you;
}
public void setYou(String you) {
this.you = you;
}
public String getYan() {
return yan;
}
public void setYan(String yan) {
this.yan = yan;
}
public String getZu() {
return zu;
}
public void setZu(String zu) {
this.zu = zu;
}
}
5.TEST program:
package com.buildertype.test;
public class Test {
public static void main(String[] args) {
Director dr = new Director();
Cai cai = dr.buildCai(new ConcreteBuilder());
System.out.println(cai.getYou());
System.out.println(cai.getYan());
System.out.println(cai.getZu());}
}
6.the result of the program:
fang you jin qu......
fang yan jin qu......
fang zu jin qu ......
7.总结:
1)2.中的Cai对象一定要有,因为对部件的设定,要反映到一个product当中去。然后把这个装配好的货物传给需要用到它的地方。
2)3.中的Director类是关键,调用它的buildCai()方法,其过程就是在构建一个货物,然后把构建好的货物返回,做为后面的用处。
Builder模式主要解决"复杂对象各个部分"的频繁需求变动。
Abstract Factory模式解决“系列对象”的需求变化。
它们相同的地方都是:抽象体内的对象或过程是稳定不变的,至于在项目中使用哪一个,这就要具体分析了。