亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

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

系統(tǒng) 1890 0
文章來源: http://blog.csdn.net/zhengzhb/article/details/7375966
定義: 將一個復(fù)雜對象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。

類型: 創(chuàng)建類模式

類圖:

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

四個要素

  • 產(chǎn)品類: 一般是一個較為復(fù)雜的對象,也就是說創(chuàng)建對象的過程比較復(fù)雜,一般會有比較多的代碼量。在本類圖中,產(chǎn)品類是一個具體的類,而非抽象類。實際編程中,產(chǎn)品類可以是由一個抽象類與它的不同實現(xiàn)組成,也可以是由多個抽象類與他們的實現(xiàn)組成。
  • 抽象建造者: 引入抽象建造者的目的,是為了將建造的具體過程交與它的子類來實現(xiàn)。這樣更容易擴展。一般至少會有兩個抽象方法,一個用來建造產(chǎn)品,一個是用來返回產(chǎn)品。
  • 建造者: 實現(xiàn)抽象類的所有未實現(xiàn)的方法,具體來說一般是兩項任務(wù):組建產(chǎn)品;返回組建好的產(chǎn)品。
  • 導(dǎo)演類: 負(fù)責(zé)調(diào)用適當(dāng)?shù)慕ㄔ煺邅斫M建產(chǎn)品,導(dǎo)演類一般不與產(chǎn)品類發(fā)生依賴關(guān)系,與導(dǎo)演類直接交互的是建造者類。一般來說,導(dǎo)演類被用來封裝程序中易變的部分。

代碼實現(xiàn)

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

建造者模式的優(yōu)點

首先,建造者模式的封裝性很好。使用建造者模式可以有效的封裝變化,在使用建造者模式的場景中,一般產(chǎn)品類和建造者類是比較穩(wěn)定的,因此,將主要的業(yè)務(wù)邏輯封裝在導(dǎo)演類中對整體而言可以取得比較好的穩(wěn)定性。

其次,建造者模式很容易進(jìn)行擴展。如果有新的需求,通過實現(xiàn)一個新的建造者類就可以完成,基本上不用修改之前已經(jīng)測試通過的代碼,因此也就不會對原有功能引入風(fēng)險。

建造者模式與工廠模式的區(qū)別

我們可以看到,建造者模式與工廠模式是極為相似的,總體上,建造者模式僅僅只比工廠模式多了一個“導(dǎo)演類”的角色。在建造者模式的類圖中,假如把這個導(dǎo)演類看做是最終調(diào)用的客戶端,那么圖中剩余的部分就可以看作是一個簡單的工廠模式了。

與工廠模式相比,建造者模式一般用來創(chuàng)建 更為復(fù)雜的對象 ,因為對象的創(chuàng)建過程更為復(fù)雜,因此將對象的創(chuàng)建過程獨立出來組成一個新的類——導(dǎo)演類。也就是說,工廠模式是將對象的全部創(chuàng)建過程封裝在工廠類中,由工廠類向客戶端提供最終的產(chǎn)品;而建造者模式中,建造者類一般只提供產(chǎn)品類中各個組件的建造,而將具體建造過程交付給導(dǎo)演類。由導(dǎo)演類負(fù)責(zé)將各個組件按照特定的規(guī)則組建為產(chǎn)品,然后將組建好的產(chǎn)品交付給客戶端。

總結(jié)

建造者模式與工廠模式類似,他們都是建造者模式,適用的場景也很相似。一般來說,如果產(chǎn)品的建造 很復(fù)雜 ,那么請用工廠模式;如果產(chǎn)品的建造 更復(fù)雜 ,那么請用建造者模式。

文章來源: http://blog.csdn.net/zhengzhb/article/details/7375966 定義: 將一個復(fù)雜對象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。
  • 產(chǎn)品類: 一般是一個較為復(fù)雜的對象,也就是說創(chuàng)建對象的過程比較復(fù)雜,一般會有比較多的代碼量。在本類圖中,產(chǎn)品類是一個具體的類,而非抽象類。實際編程中,產(chǎn)品類可以是由一個抽象類與它的不同實現(xiàn)組成,也可以是由多個抽象類與他們的實現(xiàn)組成。
  • 抽象建造者: 引入抽象建造者的目的,是為了將建造的具體過程交與它的子類來實現(xiàn)。這樣更容易擴展。一般至少會有兩個抽象方法,一個用來建造產(chǎn)品,一個是用來返回產(chǎn)品。
  • 建造者: 實現(xiàn)抽象類的所有未實現(xiàn)的方法,具體來說一般是兩項任務(wù):組建產(chǎn)品;返回組建好的產(chǎn)品。
  • 導(dǎo)演類: 負(fù)責(zé)調(diào)用適當(dāng)?shù)慕ㄔ煺邅斫M建產(chǎn)品,導(dǎo)演類一般不與產(chǎn)品類發(fā)生依賴關(guān)系,與導(dǎo)演類直接交互的是建造者類。一般來說,導(dǎo)演類被用來封裝程序中易變的部分。

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


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 成人午夜私人影院入口 | 国产专区日韩精品欧美色 | 久久是免费只精品热在线 | 亚洲精品视频免费在线观看 | 色网站在线观看 | 欧美在线香蕉在线现视频 | 国产91小视频在线观看 | 久久草在线视频 | 国产成人精品日本亚洲麻豆 | 国产亚洲欧美久久久久 | 免费国产不卡午夜福在线 | 久久亚洲精品永久网站 | 亚洲精品成人一区二区aⅴ 亚洲精品成人一区二区www | 综合久久久久久久综合网 | 亚洲欧美视屏 | 毛片免 | 欧美日韩一卡二卡 | 伊人干综合网 | 精品国产国产综合精品 | 国产成人精品三级91在线影院 | 亚洲欧洲视频在线观看 | 国产精品久久免费视频 | swag系列国产精品 | 免费一级特黄特色黄大任片 | 九九九色视频在线观看免费 | 国产精品免费看 | 婷婷色九月综合激情丁香 | 爱爱免费观看高清视频在线播放 | 99热精品6| 久久免费资源福利资源站 | 久久精品视频亚洲 | 天天干天天做天天操 | 麻豆久久婷婷综合五月国产 | 免费观看四虎精品成人 | 国产女人成人精品视频 | 午夜一级毛片不卡 | 亚洲无成人网77777 | 国产日韩一区二区三区在线播放 | 日韩a一级欧美一级 | 91久久天天躁狠狠躁夜夜 | 精品国产线拍大陆久久尤物 |