多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > 23種設計模式(4):建造者模式

23種設計模式(4):建造者模式

來源:程序員人生   發布時間:2017-03-18 08:48:21 閱讀次數:4904次
定義:將1個復雜對象的構建與它的表示分離,使得一樣的構建進程可以創建不同的表示。

類型:創建類模式

類圖:

4個要素

  • 產品類:1般是1個較為復雜的對象,也就是說創建對象的進程比較復雜,1般會有比較多的代碼量。在本類圖中,產品類是1個具體的類,而非抽象類。實際編程中,產品類可以是由1個抽象類與它的不同實現組成,也能夠是由多個抽象類與他們的實現組成。
  • 抽象建造者:引入抽象建造者的目的,是為了將建造的具體進程交與它的子類來實現。這樣更容易擴大。1般最少會有兩個抽象方法,1個用來建造產品,1個是用來返回產品。
  • 建造者:實現抽象類的所有未實現的方法,具體來講1般是兩項任務:組建產品;返回組建好的產品。
  • 導演類:負責調用適當的建造者來組建產品,導演類1般不與產品類產生依賴關系,與導演類直接交互的是建造者類。1般來講,導演類被用來封裝程序中易變的部份。

代碼實現

[java] view plain copy
  1. class Product {  
  2.     private String name;  
  3.     private String type;  
  4.     public void showProduct(){  
  5.         System.out.println("名稱:"+name);  
  6.         System.out.println("型號:"+type);  
  7.     }  
  8.     public void setName(String name) {  
  9.         this.name = name;  
  10.     }  
  11.     public void setType(String type) {  
  12.         this.type = type;  
  13.     }  
  14. }  
  15.   
  16. abstract class Builder {  
  17.     public abstract void setPart(String arg1, String arg2);  
  18.     public abstract Product getProduct();  
  19. }  
  20. class ConcreteBuilder extends Builder {  
  21.     private Product product = new Product();  
  22.       
  23.     public Product getProduct() {  
  24.         return product;  
  25.     }  
  26.   
  27.     public void setPart(String arg1, String arg2) {  
  28.         product.setName(arg1);  
  29.         product.setType(arg2);  
  30.     }  
  31. }  
  32.   
  33. public class Director {  
  34.     private Builder builder = new ConcreteBuilder();  
  35.     public Product getAProduct(){  
  36.         builder.setPart("寶馬汽車","X7");  
  37.         return builder.getProduct();  
  38.     }  
  39.     public Product getBProduct(){  
  40.         builder.setPart("奧迪汽車","Q5");  
  41.         return builder.getProduct();  
  42.     }  
  43. }  
  44. public class Client {  
  45.     public static void main(String[] args){  
  46.         Director director = new Director();  
  47.         Product product1 = director.getAProduct();  
  48.         product1.showProduct();  
  49.   
  50.         Product product2 = director.getBProduct();  
  51.         product2.showProduct();  
  52.     }  
  53. }  

建造者模式的優點

        首先,建造者模式的封裝性很好。使用建造者模式可以有效的封裝變化,在使用建造者模式的場景中,1般產品類和建造者類是比較穩定的,因此,將主要的業務邏輯封裝在導演類中對整體而言可以獲得比較好的穩定性。

        其次,建造者模式很容易進行擴大。如果有新的需求,通過實現1個新的建造者類就能夠完成,基本上不用修改之前已測試通過的代碼,因此也就不會對原有功能引入風險。

 

建造者模式與工廠模式的區分

       我們可以看到,建造者模式與工廠模式是極其相似的,整體上,建造者模式僅僅只比工廠模式多了1個“導演類”的角色。在建造者模式的類圖中,假設把這個導演類看作是終究調用的客戶端,那末圖中剩余的部份就能夠看做是1個簡單的工廠模式了。

       與工廠模式相比,建造者模式1般用來創建更加復雜的對象,由于對象的創建進程更加復雜,因此將對象的創建進程獨立出來組成1個新的類——導演類。也就是說,工廠模式是將對象的全部創建進程封裝在工廠類中,由工廠類向客戶端提供終究的產品;而建造者模式中,建造者類1般只提供產品類中各個組件的建造,而將具體建造進程交付給導演類。由導演類負責將各個組件依照特定的規則組建為產品,然后將組建好的產品交付給客戶端。

 

總結

       建造者模式與工廠模式類似,他們都是建造者模式,適用的場景也很相似。1般來講,如果產品的建造很復雜,那末請用工廠模式;如果產品的建造更復雜,那末請用建造者模式。

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国内一区二区三区精品视频 | 性亚洲| 伊人污| 91成人免费福利网站在线 | 在线观看噜噜噜私人影院 | 亚洲精品高清国产一久久 | 国产精品视频一区二区三区 | 91福利片| 红豆视频在线观看日本 | 丁香婷婷综合五月六月 | 欧美free性 | 亚洲欧美一区二区三区综合 | 91精品国产美女福到在线不卡 | 亚洲精品综合一区二区 | 成人在线视频国产 | 伊人插| 日韩激情中文字幕一区二区 | 久久女人天堂 | 手机看片国产精品 | 久久亚洲欧美成人精品 | 亚洲国产一区二区三区在线观看 | 四虎必出精品亚洲高清 | 最近中文字幕大全2019 | 午夜私人福利影院 | 一区二区三区日韩 | 亚洲国产成人99精品激情在线 | 欧美精品播放 | 99爱视频在线观看 | 羞羞影院在线观看 | 亚洲久久久| 欧美一级日本一级韩国一级 | www.99爱| 亚洲国产精品线播放 | 国产精品三级视频 | 国产亚洲欧洲精品 | 国产成人免费不卡在线观看 | 日产精品久久久一区二区 | 国产精品国产三级国产无毒 | 动画毛片| 亚洲欧美日本人成在线观看 | 男人吃奶摸下面69视频免费 |