欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

定義:

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

四個要素:

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

示例:

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

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

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

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

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

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

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

定義一個指揮者類,統(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)點:

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

缺點:

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

應用場景:

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

轉自:java知音

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Java即將引入新對象類型來解決內(nèi)存使用問題

    Java即將引入新對象類型來解決內(nèi)存使用問題

    這篇文章主要介紹了Java即將引入新對象類型來解決內(nèi)存使用問題,文章通過圍繞主題的相關資料展開詳細內(nèi)容,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-05-05
  • SpringBoot+Mybatis使用Mapper接口注冊的幾種方式

    SpringBoot+Mybatis使用Mapper接口注冊的幾種方式

    本篇博文中主要介紹是Mapper接口與對應的xml文件如何關聯(lián)的幾種姿勢,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-07-07
  • SpringBoot整合任務系統(tǒng)quartz和SpringTask的方法

    SpringBoot整合任務系統(tǒng)quartz和SpringTask的方法

    這篇文章主要介紹了SpringBoot整合任務系統(tǒng)(quartz和SpringTask),Quartz是一個比較成熟了的定時任務框架,但是捏,它稍微的有些許繁瑣,本文先給大家講解下Quartz的一些基本概念結合實例代碼給大家詳細講解,需要的朋友可以參考下
    2022-10-10
  • Java的SPI機制以及基于SPI編程示例詳解

    Java的SPI機制以及基于SPI編程示例詳解

    這篇文章主要為大家介紹了Java的SPI機制以及基于SPI編程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • Java反射框架Reflections示例詳解

    Java反射框架Reflections示例詳解

    這篇文章主要介紹了Java反射框架Reflections示例詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • Java Math.round(),Math.ceil(),Math.floor()的區(qū)別詳解

    Java Math.round(),Math.ceil(),Math.floor()的區(qū)別詳解

    這篇文章主要介紹了Java Math.round(),Math.ceil(),Math.floor()的區(qū)別詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • Java實現(xiàn)表達式二叉樹

    Java實現(xiàn)表達式二叉樹

    這篇文章主要為大家詳細介紹了如何利用Java實現(xiàn)表達式二叉樹,感興趣的小伙伴們可以參考一下
    2016-08-08
  • java線程并發(fā)semaphore類示例

    java線程并發(fā)semaphore類示例

    Java 5.0里新加了4個協(xié)調(diào)線程間進程的同步裝置,它們分別是Semaphore, CountDownLatch, CyclicBarrier和Exchanger,本例主要介紹Semaphore,Semaphore是用來管理一個資源池的工具,可以看成是個通行證
    2014-01-01
  • SpringAOP 設置注入的實現(xiàn)步驟

    SpringAOP 設置注入的實現(xiàn)步驟

    這篇文章主要介紹了SpringAOP 設置注入的實現(xiàn)步驟,幫助大家更好的理解和學習使用Spring框架,感興趣的朋友可以了解下
    2021-05-05
  • 圖解Java中插入排序算法的原理與實現(xiàn)

    圖解Java中插入排序算法的原理與實現(xiàn)

    插入排序的算法描述是一種簡單直觀的排序算法。它的工作原理是通過構建有序序列,對于未排序數(shù)據(jù),在已排序序列中從后向前掃描,找到相應位置并插入。本文將通過圖片詳解插入排序的原理及實現(xiàn),需要的可以參考一下
    2022-08-08

最新評論