Builder設計模式 通俗講解

簡單地說,就好象我要一座房子住,可是我不知道怎麼蓋(簡單的砌牆,層次較低),也不知道怎麼樣設計(建幾個房間,幾個門好看,層次較高),於是我需要找一幫民工,他們會砌牆,還得找個設計師,他知道怎麼設計,我還要確保民工聽設計師的領導,而設計師本身也不幹活,光是下命令,這裏砌一堵牆,這裏砌一扇門,這樣民工開始建設,最後,我可以向民工要房子了。在這個過程中,設計師是什麼也沒有,除了他在腦子裏的設計和命令,所以要房子也是跟民工要,記住了!

以下是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. }   

好了,我覺得這樣大概能說明白了。不知各位覺得如何呢?或者有更好的應用場景解釋,敬請賜教。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章