`

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  
其实 我对这个什么设计模式 一直非常迷糊,最近有兴趣学习学习!主要是为了涨工资吧!这篇文章解开了我的疑惑! 但就自己对上边刚开始的那段解释理解:既然雇主是向民工提出建造房子的建造房子的,最后是民工交得房子,为什么还要雇主去找设计师,直接让建造者去找设计师呢!让建造者直接拥有调用设计师的功能,这点不是很理解?
是不是出于这种考虑:
      雇主可以指定不同的建造者来建造房子
      雇主还可以指定不同的设计者来设计房子
      这样雇主建造房子  对于建造者和设计者都由雇主来掌握?

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

相关推荐

    builder设计模式源码

    Builder设计模式是一种软件设计模式,它允许我们分步骤构建复杂对象,通过将构造过程与对象的表示分离,使得相同的构造过程可以创建不同的表示。在Java或者其他面向对象编程语言中,Builder模式经常被用来提高代码的...

    晨会分享Builder设计模式

    Builder设计模式是一种软件设计模式,它属于创建型模式,主要用于对象的复杂构建过程。这种模式将对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。Builder模式的核心在于提供一个构建器接口,该接口...

    设计模式-Builder模式demo

    Builder模式是一种创建型设计模式,它提供了一种创建对象的抽象接口,并允许子类按照步骤构建复杂的对象。这种模式将对象的创建过程分离出来,使得同样的构造过程可以创建不同的表示,从而实现对象创建过程的解耦。 ...

    设计模式之创建模式Builder

    建造者模式(Builder Pattern)是设计模式中的一种创建型模式,它允许我们分步骤构建复杂的对象,而无需暴露其构造过程。这种模式的核心思想在于将对象的构建与表示分离,使得构建过程和不同表示可以独立变化,提高...

    【Java 设计模式-源码】Builder 模式:在 Java 中清晰构建自定义对象

    Java 中的 Builder 设计模式是一种基本的创建型模式,它允许逐步构建复杂的对象。它将复杂对象的构建与表示分离,使得相同的构建过程可以创建不同的表示。 三、Builder 模式的详细解释及实际示例 实际示例: Java 的...

    24种设计模式以及混合设计模式

    通过学习和应用这些设计模式,开发者不仅可以提高代码的可读性、可维护性和可扩展性,还能提升团队间的沟通效率,因为设计模式是软件工程中的通用语言。对于任何有志于提升软件开发水平的人来说,理解和掌握设计模式...

    C++设计模式代码资源11_Builder.zip

    本资源包“C++设计模式代码资源11_Builder.zip”很可能包含了C++实现Builder模式的实例代码,有助于学习者深入理解和应用这种模式。 Builder模式的主要组成部分包括Director(导演)、ConcreteBuilder(具体建造者...

    C++的设计模式学习资料

    ### C++的设计模式学习资料详解 #### 一、引言 设计模式是在软件工程领域内广泛应用的一种编程思想,它能够帮助开发者解决常见的设计问题,并提供一套标准的解决方案。设计模式通常分为三大类:创建型模式、结构型...

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

    建造者模式(Builder)是设计模式中的一种结构型模式,它允许我们分步骤构建复杂的对象,而无需暴露构造过程。这种模式将构造过程与对象的表示分离,使得同样的构造过程可以创建不同的表示。在C++中,建造者模式通常...

    23种面向对象设计模式

    文档中的“23种设计模式学习笔记.doc”可能包含了对这23种模式的详细解释和实例,而“设计模式之我爱我家.doc”可能从一个更生活化的角度来阐述设计模式的概念。“软件23种设计模式,超级经典的.pdf”可能是对这些...

    设计模式那点事

    《设计模式那点事》这本书的PPT为我们提供了一种深入理解和学习设计模式的途径。在这里,我们将深入探讨设计模式的核心概念、分类以及它们在实际开发中的应用。 首先,设计模式基于面向对象编程思想,其核心目标是...

    java设计模式中英文各种版本打包下载 学习设计模式必备材料

    Java设计模式是软件工程中的一种最佳实践,它提供了一种在特定情况下解决常见问题的模板。这些模式来自于经验丰富的...这个压缩包中的各种版本的资源,无论是中文还是英文,都能为你的设计模式学习提供宝贵的资料。

    <<c++builder>>学习大全

    C++Builder的RAD特性使其在编写MFC或WinAPI程序时具有显著优势,而其强大的Delphi遗产(VCL)提供了丰富的设计模式和组件,让开发工作更加便捷。 通过《C++Builder学习大全》这本教程,读者不仅能够学习到C++...

    东北大学四种设计模式实验

    通过这四个设计模式的实践,学生可以学习如何有效地组织代码,提高软件的复用性和扩展性。在项目"project"中,包含了实现这些模式的源代码,学生可以通过阅读和分析这些代码来加深理解,并尝试自己设计和实现类似的...

    学习PowerBuilder必备教程

    5. 应用程序架构与设计模式: 学习PowerBuilder不仅要掌握技术细节,还需要了解软件工程中的设计原则和模式,如MVC(模型-视图-控制器)架构,这有助于编写可维护、可扩展的代码。 6. PowerBuilder工作流: 了解...

    java设计模式ppt

    ### Java设计模式详解 在软件开发领域,设计模式是一种被广泛采用的解决方案,用来解决常见的设计问题。设计模式不仅能够帮助开发者写出可复用、可维护的代码,还能提高团队间的沟通效率。以下是对给定文件中提到的...

    设计模式精解-GoF 23种设计模式解析附C++.pdf

    设计模式的学习过程通常分为四个阶段:学习、表达、教授、记录。每个阶段都需要不同的技能和深度的理解。 #### 0.2 设计模式解析后记 在完成所有设计模式的学习和解析之后,开发者会发现自己已经进入了一个新的...

    head first设计模式学习代码

    《Head First设计模式学习代码详解》 设计模式是软件工程中的宝贵经验总结,它提供了一套通用的解决方案模板,帮助开发者在面对复杂问题时能够快速有效地进行设计和开发。Head First设计模式是一本非常受欢迎的设计...

    设计模式 学习伴侣 head first

    在学习过程中,配合《HeadFirst设计模式学习伴侣.jpg》这样的图片资料,可以更好地理解书中的实例和示意图,加深对设计模式本质的理解。这本书不仅适合初学者,也适合有一定经验的开发者用来巩固和提升设计能力。...

    《Java设计模式》课后答案-刘伟.rar

    创建型设计模式如单例(Singleton)、工厂方法(Factory Method)、抽象工厂(Abstract Factory)、建造者(Builder)和原型(Prototype),它们主要关注对象的创建过程,使得代码更加灵活且易于扩展。 结构型设计...

Global site tag (gtag.js) - Google Analytics