在本篇文章中,我們重點介紹建造者模式(builder pattern),建造者模式顧名思義,與建造建立相關。事實也是如此建造者模式也是建立型中的一種。在我們平常生活中會有比較複雜的東西的組成過程。比如電腦組成、手機組成、電視組成、等等。就拿電腦組成來說。可以由主機板、cpu、顯示卡等等組成。但是組成的演算法步驟是一樣的。只是不同的東西組裝起來結果不一樣而已。
在軟體程式設計的過程我們是否也會遇到類似電腦組裝這類的問題呢?當然是會的。組裝乙個電腦我們就一次,那豈不是要累死了。類似於這種組裝演算法固定但是各個部分又不穩定經常變化的情況。並且物件組裝較為複雜。為了面對解決這種情況。所以有建造者模式。建造者模式到底是如何解決問題的呢?我們一起看看吧。
將乙個複雜物件的構建與其表示相分離,使得同樣的構建過程可以建立不同的表示。
在建造者模式中一般包含如下成分:
抽象建造者:抽象建造者為建立複雜產品物件的各個部分指定抽象建立介面
具體建造者:繼承抽象建造者,實現抽象建立介面。指定建立的型別。建立各個具體的部分。
產品角色:複雜產品物件,將各個部分組成產品的介面
指揮者:呼叫各個部分,按固定的演算法建立。不涉及到具體產品類的資訊。僅負責各個部分完整的建立
就組裝電腦來說,我們一起看看建造者模式如何實現這一複雜物件的建立設計。
namespacebuilder_pattern
#region 產品角色——電腦的組成 **********==
public
class
computer
private list computer = new list();
public
void add(string
part)
public
void
show()
console.writeline(type + "
電腦組裝完成了");}}
#endregion
#region 抽象建立者——電腦中的各個部分的抽象介面**********==
public
abstract
class
builder
#endregion
#region 具體產品建立者——聯想電腦各個部分建立介面*****====
public
class
lenovobuilder : builder
public
override
void
createmotherboard()
public
override
void
creategraphicscard()
public
override
computer getcomputer()
}#endregion
#region 具體產品建立者——惠普電腦各個部分建立介面*****====
public
class
hpbuilder : builder
public
override
void
createmotherboard()
public
override
void
creategraphicscard()
public
override
computer getcomputer()
}#endregion
#region 指揮者——固定的組裝演算法***************====
//////指揮者,其中的construct是組裝的較為固定演算法
/// public
class
commander
}#endregion
}
class在建造者模式中,將乙個複雜物件的組成與元件的建立分離開。專門的具體建造者來負責元件的建立、然後由指揮者來規定固定組成、最後完成組裝。這乙個過程下來。把複雜物件的建立拆分成多個步驟。而其元件也是經常變化的。這樣一來元件的變化僅需修改增加元件的建立即可。不影響其他的擴充套件。這裡由於建造者模式最終建立的產品差異較大,所以並沒有抽象乙個產品類。前面一章中講的抽象工廠模式中解決的是」一系列產品物件」的問題。而本章中建造者模式解決的是」產品部分」的問題。抽象工廠模式關心的是整體,注重產品的建立,不關心細節的組成。而建造者模式關心的是細節,注重產品的建立的同時也關係產品組成細節的問題。program
}
1、當建立乙個複雜物件且組成的演算法獨立與其組成部分的時候。
2、 多個部件或配件可以裝配到乙個物件但產生的物件不同時。
3、建立一些複雜的物件時,這些物件的內部組成構件間的建造順序是穩定的,但是物件的內部組成構件面臨著複雜的變化。
1、使用者客戶端不必關心產品的組成及細節部分。
2、具體建造者與其他類相對獨立,易於擴充套件。不易對其他模組造成影響
3、便於控制細節
1、產品必須有共同點,使用範圍限制
2、如果內部變化較為複雜,會有較多的具體建造者類
到這裡介紹完了建造者模式,建造者模式與工廠模式相比,建造者模式更像生產的乙個復合產品,並且複雜的部件不同所構成的不同,而工廠模式僅是產品。同時建造者模式關注複雜產品細節的建立。但是工廠模式僅關心產品的建立,不在乎其細節的建立。
做自己生命的主角,而不是別人生命中的看客。
c#設計模式系列目錄
通俗易懂理解建造者模式
當乙個產品的構建過程是固定且複雜多變的,則可以將該產品的構建過程抽象出來。從乙個簡單的例子出發 比如 組裝一台電腦,你一定需要有cpu 主機板 記憶體 硬碟以及io外設。而每個部分你都可以選擇不同的型別 cpu可以是arm或者intel,記憶體可以是臺電的或是三星的等等。這樣的話,如果將構建電腦的過...
最通俗易懂的設計模式之建造者模式
認識建造者模式,首先得清楚建造者模式使用涉及的角色 首先定義抽象的builder public abstract class builder再定義所builder 中需要構造的產品 產品 public class product public void setbuilda string builda...
裝飾者設計模式 通俗易懂
精選30 雲產品,助力企業輕鬆上雲!裝飾模式 在不改變 原有類 和 不使用繼承的情況下,動態地擴充套件乙個物件的功能。因會建立乙個包裝物件,來包裹真實物件而得名。作用 增強物件的功能 例子1 牆 功能 遮風擋雨 包了牆紙的牆 本質還是牆 原功能 遮風擋雨 新增功能 陶冶情操 1 沒有改變原有類 2 ...