設計模式學習之生成器模式

UML結構類圖的經常使用畫法git

簡單工廠github

設計模式學習以外觀模式算法

設計模式學習之適配器模式設計模式

設計模式學習之單例模式框架

設計模式學習之工廠方法模式post

Demo傳送門學習

案例:關於導出數據的的應用框架,能夠導出成文本格式,XML格式,Excel格式等。對於導出的文件中主要分爲如下三個部分: 頭文件:主要描述信息是分公司或者門市點編號,導出數據的日期,文本格式中間用逗號分離 文件主體部分:包括表名稱,分條描述數據,對於文本格式,表名稱獨佔一行,數據描述一行算一條數據,字段間用逗號分隔 文件尾部:主要是輸入人。ui

下面爲了突出生成器模式,咱們先用通常的方法來解決:設計

1.通常方法

首先來定義header,data,footer的數據源3d

以後看下ExportToTxt和ExportToXML的實現

客戶端調用

運行結果

從上面的結構能夠看出,導出Txt或者XML都須要拼接頭,主體和尾部內容,完了會輸出成爲文件,對於不一樣的輸出格式,步驟都是同樣的,可是以上述方法存在如下問題:

1.重複處理步驟 2.不利於擴展其餘格式的文件

理想中的狀態應該是構建每種格式的數據文件處理過程和具體的實現步驟應該是分開的,這樣能夠很好地切換不一樣的文件格式,那麼這樣該如何實現呢?下面就進入生成器模式的學習。

2.認識生成器模式

定義

將一個複雜對象的構建和它的表示分離,使得一樣的構建過程能夠建立不一樣的表示

生成器模式的結構類圖

對於上圖中的結構元素的功能說明:

  • Builder:生成器接口,定義建立一個Product對象所需的各個部件的操做
  • ConcreteBuilder:具體生成器的實現,實現各個部件的建立,並負責組裝Product對象的各個部件,同時提供一個獲取組裝完成後的產品對象的方法。
  • Director:指導者,主要用來使用Builder接口,以一個統一的過程來構建所須要的Product對象
  • Product:產品,表示被生成器構建的複雜對象,包含多個部件

針對案例,用生成器模式來寫,具體以下:

具體步驟以下:

1.規定協議規範,也就是builder

2.實現Builder的具體產品,這裏分爲TxtBuilder,XMLBuilder

3.組合類,也就是Director,主要是組裝各個部件

4.客戶端調用

從上述已經能夠很清楚的明白生成器的實現結構和模式,主要就是對同一個構建過程,配置不一樣的生成器實現,就會生成不一樣的表現。

生成器模式有如下優勢

  • 鬆散耦合,將產品的構建和表現徹底分離,將構建過程獨立出來,使得構建算法可複用,具體表現能夠靈活方便地擴展和切換

  • 能夠很容易地改變產品的內部表示

  • 具備更好的複用性

生成器模式的本質就是分離總體構建算法和部件構造,那麼使用該模式的場景以下:

  • 若是建立對象的算法,應該獨立於該對象的組成部分以及它們的裝配方式時
  • 若是同一個構建過程有着不一樣的表示時
相關文章
相關標籤/搜索