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); } }
运行结果:
砌砖...
装门...
任务完成,交房子...