概述
1. Concept
将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示
--《设计模式》GOF
-----------------------------
2. Q&A:
a. why put the method getProduct() in the builder object, not in Director object ?
-- If put the getProduct() in the Director object, Director object must import the Product class, and it's not good in the case there are more than one products. Currently, Director object only import the interface object Builder.
-----------------------------
3. *Good Example*:
3.1 http://www.iteye.com/topic/71175
简单地说,就好象我要一座房子住,可是我不知道怎么盖(简单的砌墙,层次较低),也不知道怎么样设计(建几个房间,几个门好看,层次较高),于是我需要找一帮民工,他们会砌墙,还得找个设计师,他知道怎么设计,我还要确保民工听设计师的领导,而设计师本身也不干活,光是下命令,这里砌一堵墙,这里砌一扇门,这样民工开始建设,最后,我可以向民工要房子了。在这个过程中,设计师是什么也没有,除了他在脑子里的设计和命令,所以要房子也是跟民工要,记住了!
1,定义工人接口,就是能够完成建造房子任务的人的通用要求。
- // 工人接口,定义了各个工人所要进行的工所作。他们负责进行具体部件如窗户,地板的建造。
- // 同时因为房子是民工建的,因此建设完成后由他把房子递交回房主
- publicinterfaceBuilder{
- publicvoidmakeWindow();
- publicvoidmakeFloor();
- publicRoomgetRoom();
- }
2,定义设计师,他的职责是指挥房主指派给他的工人按照自己的设计意图建造房子。
- //设计师。他知道房子应该怎么设计,但他不会自己去建造,而是指挥民工去建造。
- publicclassDesigner{
- //指挥民工进行工作
- publicvoidorder(Builderbuilder){
- builder.makeWindow();
- builder.makeFloor();
- }
- }
3,民工,他负责具体事物的实施。
- // 民工。负责进行具体部件如窗户,地板的建造。
- //同时因为房子是民工建的,因此建设完成后由他把房子递交回房主
- publicclassMingongimplementsBuilder{
- privateStringwindow="";
- privateStringfloor="";
- publicvoidmakeWindow(){
- window=newString("window");
- }
- publicvoidmakeFloor(){
- floor=newString("floor");
- }
- //回交房子给房主
- publicRoomgetRoom(){
- if((!window.equals(""))&&(!floor.equals(""))){
- System.out.println("roomready!");
- returnnewRoom();
- }
- elsereturnnull;
- }
- }
4,房主,就是雇人,收房。
- //房主。房主的任务就是聘请一个民工,一个设计师,同时把民工给设计师指挥,督促设计师开展工作。最后从民工手上收房。
- publicclassClient{
- publicstaticvoidmain(String[]args){
- Buildermingong=newMingong();
- Designerdesigner=newDesigner();
- designer.order(mingong);
- mingong.getRoom();
- }
- }
-----------------------
3.2 http://blog.csdn.net/joyney/article/details/4000741
现实中的例子:
就拿学校来说吧,每到期末考试完成之后,老师要批改试卷,得到每个学生的期末考试成绩,而老师批改试卷这个过程不变化的,都要经过(批改试卷、统计分数、把分数上传到教务处)。每个老师都要经过这样一个步骤,而变化是其中的子过程,如:批改的是《英语》或者《数学》,统计分数的时候,可以将分数记录到纸张上,也可以用一个EXCEL文档保存起来等等。
为什么需要Director:
在这个模式中,Director类好像是一个多余的类,在应用中的作用好像并不大。其实它的作用是明显的。第一,它隔离了客户及生产过程。第二,它负责控制产品的生成过程。比如你是客户,你要买汽车,你选好车型、颜色、内外装饰等,交给Director,Director告诉你去某车间取车就可以。这样其作用大家都能体会出来了吧。
最后
以上就是冷傲大地为你收集整理的[模式之集思广义] Builder Pattern的全部内容,希望文章能够帮你解决[模式之集思广义] Builder Pattern所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复