zoukankan      html  css  js  c++  java
  • 设计模式之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. }   


    好了,我觉得这样大概能说明白了。不知各位觉得如何呢?或者有更好的应用场景解释,敬请赐教。

     
    心如猛虎,细嗅蔷薇。
  • 相关阅读:
    OpenCascade Ray Tracing Rendering
    Create New Commands in Tcl
    OpenCascade Modeling Algorithms Fillets and Chamfers
    OpenCascade Modeling Algorithms Boolean Operations
    Construction of Primitives in Open Cascade
    Open Cascade Data Exchange STL
    Tcl Tk Introduction
    Open Cascade DataExchange IGES
    Netgen mesh library : nglib
    Hello Netgen
  • 原文地址:https://www.cnblogs.com/McCa/p/4176938.html
Copyright © 2011-2022 走看看