1. 程式人生 > >golang設計模式(4)建造者模式

golang設計模式(4)建造者模式

1、建造者模式意圖:
將一個複雜的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。

2、適用性:
以下情況適合使用呢建造者模式
.當創造複雜物件的演算法一個獨立於該物件的組成部分以及它們的裝配方式時。
.當構造過程必須允許構造的物件有不同表示時。
3、結構(uml圖)
建造者模式uml

4、參與者
.Builder: 為建立一個物件的各個部件指定抽象介面。
.ConcreteBuilder:實現Builder介面以構造和裝配對應產品的各個部件;定義並明確它所建立的表示;提供一個檢索產品的介面
.Director:構建一個使用Builder介面的物件。
.Product:表示被構造的複雜物件。ConcreteBuilder建立該產品內部表示並定義它的裝配過程;包含定義組成部件的類,包括將這些部件組裝成最終的產品介面。

5、作用
建造者模式的主要作用有
.讓你可以改變一個產品的內部表示:builder物件提供給導向器一個構造產品的抽象介面。該介面使得生成器可以隱蔽這個產品的表示和內部結構,同時也隱蔽了該產品是如何裝配的。因為產品是通過抽象介面構造的,在改變產品的內部表示時所要做的是定義一個新的生成器。
.讓將構造程式碼和表示程式碼分開:builder模式通過組裝一個複雜的建立物件的建立和表示方式提高了物件的模組行。客戶不需要知道定義產品的內部結構的類的所有資訊;這些類是不出現在builder介面中的。每個ConcreteBuilder包含了建立和組裝一個特定產品的所有程式碼。這些程式碼只需要寫一次;然後不同的Director可以複用相同的部件集合的基礎上構造不同的Product。
.讓開發者可以對構造過程進行更精細的控制:builder模式和一下子就生產產品的建立型模式不同,它是在導向者的控制下一步一步構造產品的。僅當該產品完成時導向者才從生產器中取回它。因此builder介面相比其他建立型模式能更好的放映產品的構造過程 。這可以使你可以更精細的控制構建過程,從而能更精細的控制所得產品的內部結構。

程式碼示例:

package main

import (
    "fmt"
)

type Glasses struct {
    Price int64
    From  string
}

type Builder interface {
    BuildPrice(int64)
    BuildForm()
    GetGlasses() Glasses
}

type ShenZhenBuilder struct {
    glasses Glasses
}

type ShanWeiBuilder struct {
    glasses Glasses
}

func
(pS *ShenZhenBuilder) BuildPrice(iP int64) { pS.glasses.Price = iP * 10 } func (pS *ShenZhenBuilder) BuildForm() { pS.glasses.From = "shenzhen" } func (pS *ShenZhenBuilder) GetGlasses() Glasses { return pS.glasses } func (pS *ShanWeiBuilder) BuildPrice(iP int64) { pS.glasses.Price = iP * 2 } func (pS *ShanWeiBuilder) BuildForm() { pS.glasses.From = "shanwei" } func (pS *ShanWeiBuilder) GetGlasses() Glasses { return pS.glasses } type LeshiGlasses struct { First_cost int64 } func (L *LeshiGlasses) GetGlasses(b Builder) Glasses { b.BuildPrice(L.First_cost) b.BuildForm() return b.GetGlasses() } func main() { leshi := &LeshiGlasses{First_cost: 100} var glassesbuilder Builder glassesbuilder = &ShanWeiBuilder{} glasses := leshi.GetGlasses(glassesbuilder) fmt.Println("glasses's price is: ", glasses.Price, " glasses from :", glasses.From) glassesbuilder = &ShenZhenBuilder{} glasses = leshi.GetGlasses(glassesbuilder) fmt.Println("glasses's price is: ", glasses.Price, " glasses from :", glasses.From) return }

執行結果:

glasses's price is:  200  glasses from : shanwei
glasses's price is:  1000  glasses from : shenzhen

從例子可以看出。在同一個型別的Director(樂視眼鏡下),有不同的構造方法,分別是深圳眼鏡和汕尾眼鏡。如果要在廣州增加一個廣州眼鏡。只需要增加一個廣州眼鏡,並實現廣州眼鏡的時間。對應樂視眼鏡構造廣州眼鏡的方式還是一致的,因為其成本是一致的。如果要增加明凱眼鏡,則只需要增加一個明凱眼鏡的Director即可。將對眼鏡建立的過程,從直接建立,分解到Director和Builder(框架),使得構造程式碼和表示程式碼分開。在Builder的具體實現結構可以更加精細的構造每個環節。

相關推薦

golang設計模式4建造模式

1、建造者模式意圖: 將一個複雜的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。 2、適用性: 以下情況適合使用呢建造者模式 .當創造複雜物件的演算法一個獨立於該物件的組成部分以及它們的裝配方式時。 .當構造過程必須允許構造

設計模式4-- 建造模式

建造者模式(Builder Pattern)使用多個簡單的物件一步一步構建成一個複雜的物件。這種型別的設計模式屬於建立型模式,它提供了一種建立物件的最佳方式。一個 Builder 類會一步一步構造最終的物件。該 Builder 類是獨立於其他物件的。介紹意圖:將一個複雜的構建

設計模式4-建造模式

簡介 為什麼要使用建造者模式 在軟體開發中,有時會面臨一個建立複雜物件的問題。這個複雜物件的成員很複雜,建立過程也很複雜。這時,就需要使用建造者模式將這個複雜物件的構建分離到一個稱謂建造者的物件裡。

設計模式建造模式

單實例 抽象類 原型 sys 數組 組合 cto 簡單 builder GOF論述了23種設計模式,它們有3個分類————創建型模式、結構型模式、行為模式。此篇為創建型模式創建型模式抽象了實例化的過程,它們可以幫助某個系統獨立於如何創建、組合以及表示該系統所包含的對象。當系

設計模式建造模式Builder建立型

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

PHP設計模式——建造模式(Builder Pattern)

@[TOC](PHP設計模式(三)——建造者模式(Builder Pattern)) 建造者模式(Builder Pattern):將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。 建造者模式是一步一步建立一個複雜的物件,它允許使用者只通過指定複雜物件的

C#設計模式5——建造模式

1.建造者模式介紹   在軟體開發中,有時我們要建立一個複雜的物件,這個物件由幾個子部件按一定的步驟組合而成,這時候我們就可以使用建造者模式了。說到建造者我們首先想到的是蓋房子,蓋房子簡單的說有三個步驟:打地基,砌磚,粉刷。我們就以蓋房子為例解釋建造者模式的用法。   建造者模式有三個角色:建造者,具體的

設計模式——建造模式

建造者模式的核心是用多個簡單物件一步一步構建一個複雜物件,也就是將一個複雜物件的構建和表示分離開來。 以快餐定套餐為例(套餐為複雜物件,套餐是由主食和飲料等多個簡單物件構成的),程式碼如下: 先定義

設計模式——建造模式

1. 定義 建造者模式是將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。 在使用者不知道物件的建造過程和細節的情況下就可以直接建立複雜的物件。 2. 建造者模式通常包括下面幾個角色: (1)Builder:給出一個抽象介面,以規範產品物件的各個組成成分的建造

設計模式C#——建造模式

推薦閱讀:  我的CSDN  我的部落格園  QQ群:704621321       當一個複雜物件由一些子物件構成,並且

Java設計模式4--觀察模式

今天看了一下觀察者模式,總體來說不難,關鍵是要知道原理和這個模式的用法下面是我自己個人一些理解。 1、定義 觀察者模式,首先得有觀察者,一個或者多個觀察者,它們都依賴於另一個物件,也就是說,這些觀察者都觀察著一個被觀察者。那麼,當被觀察者狀態發生改變

Android設計模式—— 建造模式

    其實設計模式,只是一種定式,適用於不同的語音,今天,雖然加上了Andorid的字首,只是因為舉例僅是android程式碼,所以學好內在,則舉例僅是舉例,內涵才是到處通用的。 建造者模式解釋: 建造者模式(Builder Pattern)又叫生成器模式,是GoF

設計模式建造模式

1.建造者模式簡介 定義 建造者模式(builder),將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。 簡介 建造者模式(builder)是建立一個複雜物件的建立型模式,將構建複雜物件的過程和它的部件解耦,使得構建

設計模式解密6 - 建造模式

簡單的 對比 ide nbsp blog art 是把 部分 shp 1、簡介 定義:將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。 英文:Builder 類型:創建類模式 2、原理及組成 引:類圖 四個要素 產品類:

設計模式 c++版7——建造模式

定義:即生成器模式,將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。 示例一:汽車模型擴充套件,根據不同的產品,執行任務的順序不同 1. 類圖說明: 在CarModel 中定義了一個 setSequence 方法,車輛模型的動作如何排布在 Ar

設計模式與XML建造模式和單例模式(C++)

一、實驗目的及要求 1、掌握建立型模式的概念。 2、掌握工廠模式、抽象工廠模式、單例模式、建造者模式、原型模式的構造方式及使用情景。 二、實驗裝置(環境) 1、   軟體需求: Dev-Cpp5.4, Rational Rose / Microsoft Visio

設計模式3—— 建造Builder

說明 在眾多開源框架或者jdk原始碼中常常出現Builder,build相關的類檔名或者類名,函式名。其中很多如此命名的原因就是因為使用了建造者(Builder)模式。檢視jdk原始碼不難發現,我們常

java/android 設計模式學習筆記10---建造模式

  這篇部落格我們來介紹一下建造者模式(Builder Pattern),建造者模式又被稱為生成器模式,是創造性模式之一,與工廠方法模式和抽象工廠模式不同,後兩者的目的是為了實現多型性,而 Builder 模式的目的則是為了將物件的構建與展示分離。Builder

設計模式快速學習建造模式

建造者模式(Builder Pattern)使用多個簡單的物件一步一步構建成一個複雜的物件。這種型別的設計模式屬於建立型模式,它提供了一種建立物件的最佳方式。將一個複雜的構建與其表示相分離,使得同樣的構建過程可以建立不同的表示。 優點 建造者獨立,易擴充套件。 便於控制細節風險。

js常用設計模式實現建造模式

建立型模式 建立型模式是對一個類的例項化過程進行了抽象,把物件的建立和物件的使用進行了分離 關於建立型模式,已經接近尾聲了,還剩下建造者模式和原型模式,這一篇說一說建造者模式 建造者模式的定義 將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。 很官方哈,舉個例子,就拿他的名