我的漫漫程序之旅

          專注于JavaWeb開發
          隨筆 - 39, 文章 - 310, 評論 - 411, 引用 - 0
          數據加載中……

          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(
          "房子造好了");
              }

          }



          posted on 2008-05-23 17:18 々上善若水々 閱讀(1382) 評論(0)  編輯  收藏 所屬分類: 設計模式

          主站蜘蛛池模板: 会昌县| 凌源市| 阳谷县| 清水县| 巧家县| 博爱县| 靖远县| 芜湖县| 宜君县| 贺兰县| 喀喇沁旗| 利津县| 永修县| 浏阳市| 乐业县| 凭祥市| 平凉市| 韩城市| 永州市| 溧水县| 伽师县| 咸宁市| 伊金霍洛旗| 常熟市| 永川市| 罗山县| 青冈县| 冕宁县| 右玉县| 宁远县| 阿勒泰市| 闵行区| 五华县| 商洛市| 故城县| 句容市| 黑龙江省| 溧阳市| 郸城县| 福鼎市| 南靖县|