最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

23種設(shè)計(jì)模式(4) java生成器模式

 更新時(shí)間:2017年11月09日 11:47:37   作者:阿木俠  
這篇文章主要為大家詳細(xì)介紹了23種設(shè)計(jì)模式之java生成器模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

23種設(shè)計(jì)模式第四篇:java生成器模式

定義:

        將一個(gè)復(fù)雜對(duì)象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示。生成器模式利用一個(gè)導(dǎo)演者對(duì)象和具體建造者對(duì)象一個(gè)一個(gè)地建造出所有的零件,從而建造出完整的對(duì)象。

四個(gè)要素:

        Builder:生成器接口,定義創(chuàng)建一個(gè)Product對(duì)象所需要的各個(gè)部件的操作。
        ConcreteBuilder:具體的生成器實(shí)現(xiàn),實(shí)現(xiàn)各個(gè)部件的創(chuàng)建,并負(fù)責(zé)組裝Product對(duì)象的各個(gè)部件,同時(shí)還提供一個(gè)讓用戶獲取組裝完成后的產(chǎn)品對(duì)象的方法。
        Director:指導(dǎo)者,也被稱導(dǎo)向者,主要用來(lái)使用Builder接口,以一個(gè)統(tǒng)一的過(guò)程來(lái)構(gòu)建所需要的Product對(duì)象。
        Product:產(chǎn)品,表示被生成器構(gòu)建的復(fù)雜對(duì)象,包含多個(gè)部件。

示例:

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

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

        在實(shí)際的軟件開(kāi)發(fā)過(guò)程中,有時(shí)候面臨著“一個(gè)復(fù)雜對(duì)象”的創(chuàng)建工作,其通常由各個(gè)部分的子對(duì)象采用一定的組合構(gòu)成,由于需求的變化,這個(gè)復(fù)雜對(duì)象的各個(gè)部分或者其子對(duì)象經(jīng)常要變化(例如,雞腿堡套餐的顧客不喜歡可樂(lè),要換奶茶),但是他們的結(jié)構(gòu)卻相對(duì)穩(wěn)定(套餐都得是一份主食,副食及飲料)。當(dāng)遇到這種場(chǎng)景時(shí),使用生成器模式比較合適。

定義一個(gè)產(chǎn)品類:

public class Entity1{...}
public class Entity2{...}
public class Entity3{...}
public class Product{
   Entity1 entity1;
   Entity2 entity2;
   Entity3 entity3;
}

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

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 = ... 
   } 
   ......
}

定義一個(gè)指揮者類,統(tǒng)一調(diào)度project:

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();  
   }
}

優(yōu)點(diǎn):

        1、使用生成器模式可以使客戶端不必知道產(chǎn)品內(nèi)部組成的細(xì)節(jié)。
        2、具體的建造者類之間是相互獨(dú)立的,對(duì)系統(tǒng)的擴(kuò)展非常有利。
        3、由于具體的建造者是獨(dú)立的,因此可以對(duì)建造過(guò)程逐步細(xì)化,而不對(duì)其他的模塊產(chǎn)生任何影響。

缺點(diǎn):

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

應(yīng)用場(chǎng)景:

        1、需要生成一個(gè)產(chǎn)品對(duì)象有復(fù)雜的內(nèi)部結(jié)構(gòu)。每一個(gè)內(nèi)部成分本身可以是對(duì)象,也可以使一個(gè)對(duì)象的一個(gè)組成部分。
        2、需要生成的產(chǎn)品對(duì)象的屬性相互依賴。建造模式可以強(qiáng)制實(shí)行一種分步驟進(jìn)行的建造過(guò)程。
        3、在對(duì)象創(chuàng)建過(guò)程中會(huì)使用到系統(tǒng)中的其他一些對(duì)象,這些對(duì)象在產(chǎn)品對(duì)象的創(chuàng)建過(guò)程中不易得到

轉(zhuǎn)自:java知音

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java獲取e.printStackTrace()打印的信息方式

    Java獲取e.printStackTrace()打印的信息方式

    這篇文章主要介紹了Java獲取e.printStackTrace()打印的信息方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • JAVA并發(fā)中VOLATILE關(guān)鍵字的神奇之處詳解

    JAVA并發(fā)中VOLATILE關(guān)鍵字的神奇之處詳解

    這篇文章主要給大家介紹了關(guān)于JAVA并發(fā)中VOLATILE關(guān)鍵字的神奇之處的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • Java縮小文件內(nèi)存占用的方法技巧分享

    Java縮小文件內(nèi)存占用的方法技巧分享

    在Java應(yīng)用程序中,處理大文件時(shí)經(jīng)常會(huì)遇到內(nèi)存占用過(guò)高的問(wèn)題,為了縮小文件的內(nèi)存占用,我們可以采取一些有效的方法來(lái)優(yōu)化和管理內(nèi)存的使用,本文將介紹一些在Java中縮小文件內(nèi)存占用的技巧,需要的朋友可以參考下
    2024-10-10
  • SpringBoot整合EasyExcel實(shí)現(xiàn)導(dǎo)入導(dǎo)出數(shù)據(jù)

    SpringBoot整合EasyExcel實(shí)現(xiàn)導(dǎo)入導(dǎo)出數(shù)據(jù)

    這篇文章主要為大家詳細(xì)介紹了如何使用Vue、SpringBoot和EasyExcel實(shí)現(xiàn)導(dǎo)入導(dǎo)出數(shù)據(jù)功能,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-05-05
  • spring MVC搭建及配置詳解

    spring MVC搭建及配置詳解

    本篇文章主要介紹了spring MVC配置方法,要想靈活運(yùn)用Spring MVC來(lái)應(yīng)對(duì)大多數(shù)的Web開(kāi)發(fā),就必須要掌握它的配置及原理,有興趣的可以了解一下。
    2017-01-01
  • java多線程編程之管道通信詳解

    java多線程編程之管道通信詳解

    這篇文章主要為大家詳細(xì)介紹了java多線程編程之線程間的通信,探討使用管道進(jìn)行通信,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • javabean?中使用@Transient屬性處理臨時(shí)字段

    javabean?中使用@Transient屬性處理臨時(shí)字段

    @Transient表示該屬性并非一個(gè)到數(shù)據(jù)庫(kù)表的字段的映射,ORM框架將忽略該屬性,本文給大家介紹javabean?中臨時(shí)字段的處理:@Transient,感興趣的朋友跟隨小編一起看看吧
    2023-08-08
  • MybatisPlus如何自定義TypeHandler映射JSON類型為L(zhǎng)ist

    MybatisPlus如何自定義TypeHandler映射JSON類型為L(zhǎng)ist

    這篇文章主要介紹了MybatisPlus如何自定義TypeHandler映射JSON類型為L(zhǎng)ist,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java?延時(shí)隊(duì)列及簡(jiǎn)單使用方式詳解

    Java?延時(shí)隊(duì)列及簡(jiǎn)單使用方式詳解

    這篇文章主要介紹了Java延時(shí)隊(duì)列簡(jiǎn)單使用方式,通過(guò)本文學(xué)習(xí)知道延時(shí)隊(duì)列是什么可以用來(lái)干什么,本文通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-08-08
  • 客戶端Socket與服務(wù)端ServerSocket串聯(lián)實(shí)現(xiàn)網(wǎng)絡(luò)通信

    客戶端Socket與服務(wù)端ServerSocket串聯(lián)實(shí)現(xiàn)網(wǎng)絡(luò)通信

    這篇文章主要為大家介紹了客戶端Socket與服務(wù)端ServerSocket串聯(lián)實(shí)現(xiàn)網(wǎng)絡(luò)通信的內(nèi)容詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-03-03

最新評(píng)論

合阳县| 滁州市| 滁州市| 太谷县| 永靖县| 长汀县| 墨江| 班戈县| 建水县| 江门市| 高州市| 河南省| 浮山县| 双牌县| 额尔古纳市| 修水县| 金川县| 南昌市| 江口县| 尼木县| 山西省| 郴州市| 天长市| 微山县| 玉门市| 永川市| 广安市| 永仁县| 昭觉县| 扎囊县| 永平县| 涪陵区| 湘潭市| 皮山县| 江达县| 富源县| 西林县| 麦盖提县| 甘肃省| 西和县| 富顺县|