`
zzg
  • 浏览: 124802 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Builder - 创建者模式(三)

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

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

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

1,定义工人接口,就是能够完成建造房子任务的人的通用要求。
java 代码
 
  1. // 工人接口,定义了各个工人所要进行的工所作。他们负责进行具体部件如窗户,地板的建造。
  2. // 同时因为房子是民工建的,因此建设完成后由他把房子递交回房主
  3. public interface Builder {  
  4.     
  5.   public  void makeWindow();  
  6.   
  7.   public  void makeFloor();  
  8.   
  9.   public  Room  getRoom();  
  10. }  

2,定义设计师,他的职责是指挥房主指派给他的工人按照自己的设计意图建造房子。
java 代码
 
  1. // 设计师。他知道房子应该怎么设计,但他不会自己去建造,而是指挥民工去建造。  
  2. public class Designer {  
  3.   
  4.   // 指挥民工进行工作  
  5.   public void order(Builder  builder) {  
  6.     builder.makeWindow();  
  7.     builder.makeFloor();  
  8.   }  
  9. }  

3,民工,他负责具体事物的实施。
java 代码
 
  1. // 民工。负责进行具体部件如窗户,地板的建造。
  2. //同时因为房子是民工建的,因此建设完成后由他把房子递交回房主  
  3. public class Mingong  implements Builder {  
  4.   private  String window="";  
  5.   private  String floor="";  
  6.     
  7.   public  void makeWindow() {  
  8.     window=new String("window");  
  9.   }  
  10.   
  11.   public  void makeFloor(){  
  12.     floor=new String("floor");  
  13.   }  
  14.    
  15.   // 回交房子给房主  
  16.   public  Room  getRoom() {  
  17.     if((!window.equals(""))&&(!floor.equals(""))) {  
  18.       System.out.println("room ready!");  
  19.       return new Room();  
  20.     }  
  21.     else return null;  
  22.   }  
  23. }  

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

由builder交房子是正确的,因为房子的状态在builder里面而不在director这里.

当然通过director简介从builder得到房子也是可以考虑的!

director从职责上应该同builder分开,毕竟一个是制造部分,一个是整体设计,两重职业.

分享到:
评论

相关推荐

    设计模式-创建者模式(Builder)

    创建者模式,或称为Builder模式,是一种广泛应用的设计模式,在软件开发中扮演着重要角色。它主要用于将一个复杂对象的构造与其表示分离,以使得同样的构造过程可以创建不同的表示。这不仅提高了代码的可维护性,也...

    c++设计模式-创建型模式-建造者模式

    **建造者模式(Builder Pattern)**是软件设计模式中的一种创建型模式,它允许我们分步骤构建复杂的对象,而无需暴露构建过程。在C++中,这种模式常用于将对象的创建过程与使用过程分离,使得对象的构建更加灵活,...

    builder-generator-idea-plugin,.zip

    "Builder Generator Idea Plugin" 是一个创新性的工具,它允许开发者快速为类生成构建者模式(Builder Pattern)代码,并能轻松在类与构建者之间进行切换。Builder模式是一种创建型设计模式,常用于对象实例化过程的...

    builder-demo.zip

    "builder-demo.zip"的示例代码将为我们提供一个直观的参考,帮助理解如何在实践中运用建造者模式来创建和管理复杂对象。通过学习这个示例,我们可以更好地掌握建造者模式的核心概念,并将其应用到自己的项目中。

    创建者模式(Builder)

    **创建者模式(Builder)** 创建者模式是一种设计模式,属于建造者模式,它将复杂的对象构造过程分离开来,使得相同的构造过程可以创建不同的表示。这种模式的主要优点在于能够隔离对象的构建过程,使代码更加清晰,...

    毕业设计----日记本-----C++Builder----Access

    这个毕业设计项目综合运用了C++Builder的编程技巧和数据库管理,对于学习者来说,是一个很好的实践平台,可以深入理解面向对象编程、数据库设计与操作,以及如何将两者结合创建实用的应用程序。

    设计模式1-创建型模式

    创建型模式包括Factory Method(工厂方法)、Abstract Factory(抽象工厂)、Builder(建造者)、Prototype(原型)、Singleton(单例)等。这些模式解决了对象的创建问题,提供了一种通用的解决方案。 结构型模式...

    设计模式-Builder模式demo

    在这个"设计模式-Builder模式demo"中,我们可以期待看到以下内容: 1. **Product类**:代表要构建的复杂对象,可能包含多个部分或属性。例如,一个Product可能是汽车类,拥有引擎、轮胎等属性。 2. **Builder接口*...

    CocosBuilder-2.1.zip 正宗2.1版本

    CocosBuilder 2.1可能提供了更稳定的预览模式和更便捷的错误调试工具,帮助开发者快速定位和解决问题。 5. **动作和动画编辑**:CocosBuilder允许开发者创建和编辑复杂的动作序列和动画,2.1版本可能增强了动画编辑...

    设计模式 创建型模式 Builder模式(建造者)

    Builder模式 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 统设计中,有时候面临着一个“复杂系统”的创建工作,该对象通常由各个部分的子对象用一定的算法构成,或者说按一定的...

    设计模式之创建模式Builder

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

    Java设计模式-建造者模式详解

    Java设计模式-建造者模式详解将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。生成器模式(Builder)是使用多个“小型”工厂来最终创建出一个完整对象。当我们使用Builder的时候,...

    Java 设计模式-建造者模式(Builder)Android讲解

    建造者模式(Builder)是Java设计模式中的一种创建型模式,它允许我们分步骤构建复杂的对象,而无需暴露其构造过程。在Android开发中,这种模式尤其有用,因为Android组件如Activity、Fragment等的初始化过程通常...

    (创建型模式)Builder模式

    Builder模式通常包含四个主要角色:Product(产品),Builder(建造者),ConcreteBuilder(具体建造者)和Director(导演)。Product是被构建的对象,具有多种组成部件;Builder定义了构建产品的接口,而不涉及具体...

    SceneBuilder-15.0.1.zip

    总结,JavaFX Scene Builder 15.0.1是JavaFX开发者的得力助手,它的可视化设计模式、实时预览和便捷的代码生成功能,使得JavaFX应用的界面设计变得简单而高效。无论是新手还是经验丰富的开发者,都可以借助这个工具...

    Python库 | django-forms-builder-0.8.4.tar.gz

    通过以上介绍,我们可以看出`django-forms-builder-0.8.4.tar.gz`是一个强大的工具,它简化了Django项目中的表单创建过程,让开发者可以专注于业务逻辑,而不用过于关注表单的细节实现。对于需要频繁创建和修改表单...

    C#面向对象设计模式纵横谈-创建型模式

    4. **建造者模式(Builder)** 建造者模式将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。它适用于需要构建多个部分的对象,且各部分构造顺序可能变化的情况。在C#中,通常会定义一个建造者...

    4.设计模式-建造者模式1

    "设计模式-建造者模式" 设计模式是软件开发中常用的解决问题的方法和模式,旨在提高软件的可维护性、灵活性和可重用性。设计模式可以分为三大类:创建型模式、结构型模式和行为型模式。今天,我们将讨论创建型模式...

    java设计模式-建造者模式(Builder Pattern)

    在Java中,建造者模式(Builder Pattern)是一种创建型设计模式,它允许你分步骤地构建一个复杂对象。这个模式通过将构建过程和表示过程分离,使得同样的构建过程可以创建不同的表示。建造者模式特别适合用于创建...

    设计模式之创建者模式.pdf

    #### 三、创建者模式的应用场景 创建者模式适用于以下情况: - 当创建一个复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。 - 当构造过程必须允许被构造的对象有不同的表示时。 - 当对象的创建...

Global site tag (gtag.js) - Google Analytics