設計模式之建造者模式

1、定義

Separate the construction of a complex object from its representation so that the same construction process can create different representations.(將一個複雜對象的構建與它的表示分離,使得一樣的構建過程能夠建立不一樣的表示。)設計模式

2、構成

(二)類圖

引用《設計模式之禪》中的類圖:ui

其中:設計

  • Product產品抽象
  • ConcreteProduct具體產品類
  • Builder抽象建造者 規範產品的組建,通常是由子類實現。
  • ConcreteBuilder具體建造者 實現抽象類定義的全部方法,提供設置產品類成員變量的方法以及返回產品類對象的方法,也就是隻提供一系列建造對象的行爲。
  • Director導演類 負責準備基礎數據,調用具體建造者進行建造,只關注建造對象的過程。
  • 注:其中產品類的特色是,同一個類成員變量不一樣則行爲也有不一樣

3、優勢

封裝各個產品的生成邏輯,上層業務只關心須要獲取哪一個產品。3d

4、使用場景

  • 我對建造者模式使用場景的理解是同一個類的成員變量不一樣則行爲也有不一樣,經過組裝成員變量封裝該類對象的建立。

對於一類對象,對一個行爲的區別咱們使用成員變量區分更方便,這意味着咱們將某一個行爲抽象到了成員變量上面,成員變量不一樣,致使的產品特徵也不一樣。這個時候用建造者模式來獲取這些具體的對象更方便。這時候咱們能夠將設置成員變量和獲取對象兩個行爲抽象到建造者對象的方法中,其中建造者產出的是一類對象,這一類對象僅僅是成員變量的不一樣,那麼導演類的職責就是爲場景方提供確切的對象,只關注構建的過程,上層場景只關注獲取某一個確切的類。當咱們須要某一個特殊的產品時僅僅經過導演類去調用建造者的設置變量的方法(setPart()方法)和獲取對象的方法(build()方法)就能獲得想要的對象對象

5、與工廠模式的區別

我的理解是,工廠模式裏面的工廠關注的是直接實例化某類對象獲得產品,但對於建造者模式裏面的建造者而言,建造者並不直接返回產品,建造者只是提供建造方法(關注的是setPart方法-設置成員變量,product方法-產出設置後的產品)去獲取產品,真正獲取產品是由導演類獲取,經過同一個建造者,兩種應用場景的區別是咱們須要獲取的產品對應的JAVA類,是不是依賴成員變量不一樣來維護一種需求上的變化。blog

相關文章
相關標籤/搜索