`

Builder设计模式的学习

阅读更多

 对于Builder模式很简单,但是一直想不明白为什么要这么设计,为什么要向builder要Product而不是向知道建造过程的Director要。刚才google到一篇文章,总算清楚了。在这里转贴一下这位richardluo的比喻

简单地说,就好象我要一座房子住,可是我不知道怎么盖(简单的砌墙,层次较低),也不知道怎么样设计(建几个房间,几个门好看,层次较高),于是我需要找一帮民工,他们会砌墙,还得找个设计师,他知道怎么设计,我还要确保民工听设计师的领导,而设计师本身也不干活,光是下命令,这里砌一堵墙,这里砌一扇门,这样民工开始建设,最后,我可以向民工要房子了。在这个过程中,设计师是什么也没有,除了他在脑子里的设计和命令,所以要房子也是跟民工要,记住了!

以下是richardluo的代码,我根据他的思路加上了相应的注释。

1,定义工人接口,就是能够完成建造房子任务的人的通用要求。

    // 工人接口,定义了各个工人所要进行的工所作。他们负责进行具体部件如窗户,地板的建造。
    
// 同时因为房子是民工建的,因此建设完成后由他把房子递交回房主
   public interface Builder {  
       
     
public  void makeWindow();  
      
   
public  void makeFloor();  
    
    
public  Room  getRoom();  
}
  

2,定义设计师,他的职责是指挥房主指派给他的工人按照自己的设计意图建造房子。

   // 设计师。他知道房子应该怎么设计,但他不会自己去建造,而是指挥民工去建造。  
    public class Designer {  
      
      
// 指挥民工进行工作  
      public void order(Builder  builder) {  
     builder.makeWindow();  
       builder.makeFloor();  
     }
  
    }
  

3,民工,他负责具体事物的实施。

     // 民工。负责进行具体部件如窗户,地板的建造。
    
//同时因为房子是民工建的,因此建设完成后由他把房子递交回房主  
    public class Mingong  implements Builder {  
     
private  String window="";  
     
private  String floor="";  
        
      
public  void makeWindow() {  
      window
=new String("window");  
    }
  
     
     
public  void makeFloor(){  
       floor
=new String("floor");  
     }
  
     
     
// 回交房子给房主  
     public  Room  getRoom() {  
       
if((!window.equals(""))&&(!floor.equals(""))) {  
         System.out.println(
"room ready!");  
        
return new Room();  
       }
  
       
else return null;  
     }
  
  }
  


4,房主,就是雇人,收房。

 // 房主。房主的任务就是聘请一个民工,一个设计师,同时把民工给设计师指挥,督促设计师开展工作。最后从民工手上收房。    
 public class Client {    
     
   
public static void main(String[] args) {    
      Builder mingong 
= new Mingong();    
      Designer  designer 
= new  Designer();    
      designer.order(mingong);    
      mingong.getRoom();    
   }
    
 }
  

5.房子类:

public class Room
{
    
public Room()
    
{
        System.out.println(
"房子造好了");
    }

}


々上善若水々 2008-05-23 17:18 发表评论
分享到:
评论
3 楼 z390174504 2013-07-04  
不错,非常易懂
2 楼 younglibin 2011-12-08  
文章浅显易懂  很好 谢谢  学习了!
1 楼 younglibin 2011-12-08  
其实 我对这个什么设计模式 一直非常迷糊,最近有兴趣学习学习!主要是为了涨工资吧!这篇文章解开了我的疑惑! 但就自己对上边刚开始的那段解释理解:既然雇主是向民工提出建造房子的建造房子的,最后是民工交得房子,为什么还要雇主去找设计师,直接让建造者去找设计师呢!让建造者直接拥有调用设计师的功能,这点不是很理解?
是不是出于这种考虑:
      雇主可以指定不同的建造者来建造房子
      雇主还可以指定不同的设计者来设计房子
      这样雇主建造房子  对于建造者和设计者都由雇主来掌握?

不知道问的对不对,就以上先简单的记下,以后在慢慢继续领会!
如果楼主能解开我的迷惑就更好了!

相关推荐

    设计模式C++学习之建造者模式(Builder)

    设计模式C++学习之建造者模式(Builder)

    研磨设计模式(完整带书签).part2.pdf

    也可以作为高效学生深入学习设计模式的参考读物! 第1章 设计模式基础 第2章 简单工厂 第3章 外观模式 第4章 适配器模式(Adapter) 第5章 单例模式(Singleton) 第6章 工厂方法模式(Factory Method) 第7章...

    Head First设计模式

    第12章介绍如何将两个以上的设计模式结合起来成为新的设计模式(例如著名的MVC模式),作者称其为复合设计模式(这是作者自创的名称,并非四人组的标准名词),第13章介绍如何进一步学习设计模式,如何发觉新的设计模式...

    Head First 设计模式

    第12章介绍如何将两个以上的设计模式结合起来成为新的设计模式(例如著名的MVC模式),作者称其为复合设计模式(这是作者自创的名称,并非四人组的标准名词),第13章介绍如何进一步学习设计模式,如何发觉新的设计模式...

    HeadFirst设计模式(中文版)

    第12章介绍如何将两个以上的设计模式结合起来成为新的设计模式(例如著名的MVC模式),作者称其为复合设计模式(这是作者自创的名称,并非四人组的标准名词),第13章介绍如何进一步学习设计模式,如何发觉新的设计模式...

    23种Python设计模式示例演示源码包.rar

    23种Python设计模式示例演示源码包,比如包括了工厂模式、Bridge桥接模式、Builder构建模式、Facade外观模式、Adapter适配器模式,Composite组合模式、Decorator装饰器模式,FactoryMethod工厂方法模式、Flyweight享...

    head first 设计模式

    第12章介绍如何将两个以上的设计模式结合起来成为新的设计模式(例如著名的MVC模式),作者称其为复合设计模式(这是作者自创的名称,并非四人组的标准名词),第13章介绍如何进一步学习设计模式,如何发觉新的设计模式...

    大优惠Head First 设计模式

    第12章介绍如何将两个以上的设计模式结合起来成为新的设计模式(例如著名的MVC模式),作者称其为复合设计模式(这是作者自创的名称,并非四人组的标准名词),第13章介绍如何进一步学习设计模式,如何发觉新的设计模式...

    Head First 设计模式(中文版)

    第12章介绍如何将两个以上的设计模式结合起来成为新的设计模式(例如著名的MVC模式),作者称其为复合设计模式(这是作者自创的名称,并非四人组的标准名词),第13章介绍如何进一步学习设计模式,如何发觉新的设计模式...

    HeadFirst 设计模式java源代码

    第12章介绍如何将两个以上的设计模式结合起来成为新的设计模式(例如著名的MVC模式),作者称其为复合设计模式(这是作者自创的名称,并非四人组的标准名词),第13章介绍如何进一步学习设计模式,如何发觉新的设计模式...

    设计模式可复用面向对象软件的基础.zip

    书名: 设计模式可复用面向对象软件的基础 英文原书名: Design Patterns:Elements of Reusable Object-Oriented software 作者: Erich Gamma 等 译者: 李英军 马晓星 蔡敏 刘建中 书号: 7-111-07575-7 页码: 254 定价...

    Head First设计模式(中文,无水印,完整版)

    第12章介绍如何将两个以上的设计模式结合起来成为新的设计模式(例如著名的MVC模式),作者称其为复合设计模式(这是作者自创的名称,并非四人组的标准名词),第13章介绍如何进一步学习设计模式,如何发觉新的设计...

    head first 设计模式-设计模式必读

    第12章介绍如何将两个以上的设计模式结合起来成为新的设计模式(例如著名的MVC模式),作者称其为复合设计模式(这是作者自创的名称,并非四人组的标准名词),第13章介绍如何进一步学习设计模式,如何发觉新的设计模式...

    设计模式:可复用面向对象软件的基础--详细书签版

     “[设计模式]在实用环境下特别有用,因为它分类描述了一组设计良好,表达清楚的面向对象软件设计模式。整个设计模式领域还很新,本书的四位作者也许已占据了这个领域造诣最深的专家中的半数,因而他们定义模式的方法...

    设计模式 GOF 23

    本书设计实例从面向对象的设计中精选出23个设计模式,总结了面向对象设计中最有价值的经验,并且用简洁可复用的形式表达出来。本书分类描述了一组设计良好,表达清楚的软件设计模式,这些模式在实用环境下有特别有用...

    设计模式--C++

    1.1 什么是设计模式 2 1.2 Smalltalk MVC 中的设计模式 3 1.3 描述设计模式 4 1.4 设计模式的编目 5 1.5 组织编目 7 1.6 设计模式怎样解决设计问题 8 1.6.1 寻找合适的对象 8 1.6.2 决定对象的粒度 9 1.6.3 指定对象...

    Android源码设计模式解析与实战

    本书专门介绍Android源代码的设计模式,共26章,主要讲解面向对象的六大原则、主流的设计模式以及MVC和MVP模式。主要内容为:优化代码的首步、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特原则、...

    Head First 设计模式(中文完整版+附书源码)part1

    第12章介绍如何将两个以上的设计模式结合起来成为新的设计模式(例如著名的MVC模式),作者称其为复合设计模式(这是作者自创的名称,并非四人组的标准名词),第13章介绍如何进一步学习设计模式,如何发觉新的设计...

    研磨设计模式(完整带书签).part1.pdf

    也可以作为高效学生深入学习设计模式的参考读物! 第1章 设计模式基础 第2章 简单工厂 第3章 外观模式 第4章 适配器模式(Adapter) 第5章 单例模式(Singleton) 第6章 工厂方法模式(Factory Method) 第7章...

Global site tag (gtag.js) - Google Analytics