一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 23種設計模式(4) java生成器模式

23種設計模式(4) java生成器模式

2021-02-02 11:36阿木俠 Java教程

這篇文章主要為大家詳細介紹了23種設計模式之java生成器模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下

23種設計模式第四篇:java生成器模式

定義:

        將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。生成器模式利用一個導演者對象和具體建造者對象一個一個地建造出所有的零件,從而建造出完整的對象。

四個要素:

        Builder:生成器接口,定義創建一個Product對象所需要的各個部件的操作。
        ConcreteBuilder:具體的生成器實現,實現各個部件的創建,并負責組裝Product對象的各個部件,同時還提供一個讓用戶獲取組裝完成后的產品對象的方法。
        Director:指導者,也被稱導向者,主要用來使用Builder接口,以一個統一的過程來構建所需要的Product對象。
        Product:產品,表示被生成器構建的復雜對象,包含多個部件。

示例:

        網上有用KFC的例子來描述生成器模式,比較通俗易懂。
        假設KFC推出兩種套餐:奧爾良雞腿堡套餐和香辣雞腿堡套餐。
        奧爾良套餐包括:一個奧爾良雞腿堡、一個炸雞翅、一杯雪碧。
        雞腿堡套餐包括:一個香辣雞腿堡、一份薯條、一杯可樂。
        每份套餐都是:主食、副食、飲料。

        KFC服務員要根據顧客的要求來提供套餐,那這個需求里面什么是固定的,什么是變化的呢?很明顯顧客都是要的套餐,顧客的目的是一樣的。 套餐里面都是主食、副食、飲料,這也是固定的。至于主食是什么、副食是什么、飲料是什么,這個是變化的。

        在實際的軟件開發過程中,有時候面臨著“一個復雜對象”的創建工作,其通常由各個部分的子對象采用一定的組合構成,由于需求的變化,這個復雜對象的各個部分或者其子對象經常要變化(例如,雞腿堡套餐的顧客不喜歡可樂,要換奶茶),但是他們的結構卻相對穩定(套餐都得是一份主食,副食及飲料)。當遇到這種場景時,使用生成器模式比較合適。

定義一個產品類:

?
1
2
3
4
5
6
7
8
public class Entity1{...}
public class Entity2{...}
public class Entity3{...}
public class Product{
   Entity1 entity1;
   Entity2 entity2;
   Entity3 entity3;
}

產品類中的各個小模塊是不一樣的,由他們建造組成產品。
根據具體場景要求,定義n個生成器類:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public interface IBuild{  
  public void createEntity1();  
  public void createEntity2();  
  public void createEntity3();  
  public Product composite();  
  public Product create(); 
}
public class BuildProduct implements IBuild{
   Product p = new Product();
   public void createEntity1(){
   //p.entity1 = ...
   }  
   public Product create(){
     return composite();
   }
   ......
}
public class BuildProduct1 implements IBuild{
   Product p = new Product();           
   public void createEntity1(){
        //p.entity1 = ...
   }
   ......
}

定義一個指揮者類,統一調度project:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Director{
   private IBuild build;
   public Director(IBuild build){
      this.build = buid;
   }  
   public Product build(){
      build.create();
   }  
   public static void main(){
     IBuild build = new BuildProduct();
     Director direcotr = new Director(build);
     Prodcut p = director.build(); 
   }
}

優點:

        1、使用生成器模式可以使客戶端不必知道產品內部組成的細節。
        2、具體的建造者類之間是相互獨立的,對系統的擴展非常有利。
        3、由于具體的建造者是獨立的,因此可以對建造過程逐步細化,而不對其他的模塊產生任何影響。

缺點:

        建造者模式的“加工工藝”是暴露的,這樣使得建造者模式更加靈活,也使得工藝變得對客戶不透明。(待考證,筆者這里不是很理解,歡迎說自己的見解)

應用場景:

        1、需要生成一個產品對象有復雜的內部結構。每一個內部成分本身可以是對象,也可以使一個對象的一個組成部分。
        2、需要生成的產品對象的屬性相互依賴。建造模式可以強制實行一種分步驟進行的建造過程。
        3、在對象創建過程中會使用到系統中的其他一些對象,這些對象在產品對象的創建過程中不易得到

轉自:java知音

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 99热精品国产麻豆 | 成人特级毛片69免费观看 | 日韩一级片在线观看 | 男男羞羞视频网站国产 | 日本中文字幕一区二区有码在线 | 狗老公小说 | 亚洲第一网站免费视频 | 护士的小嫩嫩好紧好舒服 | 色人阁小说 | 欧美色图日韩 | 丰满大屁股美女一级毛片 | www免费插插视频 | 奇米社区 | 日本哺乳期网站xxxx | 波多野结衣中文字幕在线 | 四虎免费在线视频 | 久久久大香菇 | 日韩伦理在线看 | 亚洲第一区欧美日韩精品 | 亚洲、国产综合视频 | 国产综合欧美日韩视频一区 | 好男人资源免费观看 | 苍井空色欲迷墙 | 全弄乱纶小说 | 男女男精品网站免费观看 | 91噜噜噜在线观看 | 亚洲黄色三级视频 | 国产亚洲人成网站在线观看不卡 | 黑人草| 日产国产精品亚洲系列 | 国产99久久精品一区二区 | ssni-497新任美脚女教师 | 狠狠撸在线影院 | 国产精品成人自拍 | 秋霞理论在一l级毛片 | 亚洲四虎影院 | 狠狠澡| 婷婷99视频精品全部在线观看 | 99视频在线看观免费 | 2019亚洲男人天堂 | 激情乱文 |