BuilderPattern
意图:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
这里举个例子帮助理解,分别由主人master、设计师director、民工mingong 组成。
主人要装修房子,却什么也不会,口袋只剩钱了。于是他要请设计师,还有民工。这是主人把任务交给他们了。好,这时开始了。设计师只会设计,发号施令,砌砖什么的,啥也不会。于是他又把这些任务交给了民工。
但是民工必须满足一定的要求才能胜任(实现接口builder,使其满足要求);。。。。。。好了,装修好了,这时到了交房了。builder设计模式的作者让 民工 交房(作者的意图代码备注本人有个人的理解,当然网上 还有很多个人的看法)。OK。完成!
package Test;
/**
* 建造者模式 成员:主人master、设计师director、民工mingong;
*
* @author Administrator
*
*/
public class Client {
public static void main(String[] args) {
Builder builder = new Mingong();
Director director = new Director(builder);//对民工发号施令
/**
* 当房子建好后,主人来要房,这是我们会有这样一个问题,是向设计师要还是民工要?
* 对于这个问题,结果是向民工要。
* 个人的理解:设计师只负责发号施令,把心理的想法什么的告诉民工,由民工来建设。
* 起到指导作用。而对于民工的任务是否完成,还得有民工自己知道。只有的完成了,由民工
* 告诉设计师,或者主人。所以主人要房子,得向民工要。对于本人的解释只作为参考。到底
* 是为什么看个人理解。
*/
builder.handHouse();
}
}
接口:
package Test;
/**
* master 的一些需求,民工要会的一些技能
* @author Administrator
*
*/
public interface Builder {
void buildWindow();//装窗户
void buildDoor();//装门
void buildBrick();//砌砖
void handHouse();//交房子
}
民工:
package Test;
/**
* 能胜任主人要求的民工,需要具备的技能
* @author Administrator
*
*/
public class Mingong implements Builder {
@Override
public void buildWindow() {
// TODO Auto-generated method stub
JOut.println("装窗户...");
}
@Override
public void buildDoor() {
// TODO Auto-generated method stub
JOut.println("装门...");
}
@Override
public void buildBrick() {
// TODO Auto-generated method stub
JOut.println("砌砖...");
}
@Override
public void handHouse() {
JOut.println("任务完成,交房子...");
}
}
设计师:
package Test;
/**
* 设计者,主要负责命令民工做什么。
* @author Administrator
*
*/
public class Director {
Director(Builder builder){
builder.buildBrick();//砌砖
builder.buildDoor();//装门
}
}
方便输出,写了个静态类:
package Test;
public class JOut {
public static void println(Object o) {
System.out.println(o);
}
}
运行结果:
砌砖...
装门...
任务完成,交房子...