java设计模式之建造者模式
2012-12-26 14:15
495 查看
java设计模式之建造者模式
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 stub
cai.setYan("fang yan jin qu......");
}
@Override
public void fangZu() {
// TODO Auto-generated method stub
cai.setZu("fang zu jin qu ......");
}
@Override
public Cai cook_cai() {
// TODO Auto-generated method stub
return 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模式解决“系列对象”的需求变化。
它们相同的地方都是:抽象体内的对象或过程是稳定不变的,至于在项目中使用哪一个,这就要具体分析了。
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 stub
cai.setYan("fang yan jin qu......");
}
@Override
public void fangZu() {
// TODO Auto-generated method stub
cai.setZu("fang zu jin qu ......");
}
@Override
public Cai cook_cai() {
// TODO Auto-generated method stub
return 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模式解决“系列对象”的需求变化。
它们相同的地方都是:抽象体内的对象或过程是稳定不变的,至于在项目中使用哪一个,这就要具体分析了。
相关文章推荐
- Java设计模式(15)--建造者
- JAVA设计模式:建造者模式
- (设计模式四)java设计模式之建造者模式
- Java设计模式之七:建造者模式
- java设计模式之建造者模式
- java设计模式之建造者模式
- Java设计模式-建造者模式
- Java设计模式之-建造者模式
- Java设计模式百例 - 建造者模式
- JAVA开发的23种设计模式之 --- 建造者模式
- Java设计模式之建造者模式
- 深入解析Java的设计模式编程中建造者模式的运用
- java设计模式-建造者模式
- 设计模式(JAVA)-------建造者模式
- JAVA-建造者设计模式
- java设计模式之建造者模式
- java设计模式之建造者模式
- Java设计模式 (4) 建造者
- java设计模式-每天三个设计模式之工厂、单例、建造者
- java设计模式(四)——建造者模式