抽象一點說建造者模式的目的:
將乙個複雜物件的構建與其表示相分離,使得同樣的構建過程可以建立不同的表示。——-《設計模式》gof
舉個例子,一台電腦的主機板上有很多的硬體,可能根據需要要經常的更換。比如現在要將intel的cpu換成amd的,那麼我們不需要從新的構建一塊主機板,而是只換cpu就可以了。這就是建造者模式需要達到的目的。整個建築過程和具體的表示分離,建造過程指的是每個電腦主機板都有cpu,表示指的是具體使用的cpu型號。很好理解,表示和建造過程實際上沒有必然的聯絡,如果分離將增加很多的靈活性。
一般建造者模式包含以下幾個類,builder,product,director,concretebuilder。我們想象乙個這樣的場景。要建造一塊主機板,這個建造過程是可以確定的,不能確定的是各個零部件的生產廠家。product就是主機板,主機板中包含了cpu,memory,io零部件。建造者只管建立這些零部件,director負責將零部件組合到一起形成產品,並通過乙個方法提供產品。
我們來看一下uml:
builder作為乙個基本的建造者介面
public
inte***ce builder
sonybuilder實現建造者介面
public
class
sonybuilder
implements
builder
public
void
buildmemory()
public
void
buildio()
public productor getproductor()
}
sonyproductor繼承productor
public
class
sonyproductor
extends
productor
public
void
setio(string io)
public string getcpu()
public
void
setcpu(string name)
public string getmemory()
public
void
setmemory(string memory)
}
huaweibuilder實現建造者介面
public class huaweibuilder implements builder
@override
public void buildmemory()
@override
public void buildio()
@override
public productor getproductor()
huaweiproductor 繼承productor類
public class huaweiproductor extends productor
public void setio(string io)
public string getcpu()
public void setcpu(string name)
public string getmemory()
public void setmemory(string memory)
}
director中構建乙個productor(可以是索尼,也可以是華為)
public class director
public static void main(string args)
執行結果:sonycpu
sonymemory
sonyio
huwei cpu
huwei memory
huwei io
C 設計模式05 建造者模式
建造者模式 在gof的 設計模式 可復用物件導向軟體的基礎 中是這樣說的 將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。這句話,似懂非懂的。乙個複雜物件的建立,其通常是由很多的子物件構成 如果乙個物件能夠直接就建立好了,那麼也不會稱之為複雜物件。由於專案中需求的變化,這個...
設計模式 05 建造者模式 鏈式呼叫
05.建造者模式 鏈式呼叫 我們在開發過程中,經常遇到這種寫法,product product new builder seta fo setb bar setc so build 這種寫法可以一直.set鏈式呼叫,這也是建造者模式的一種寫法,通過鏈式呼叫去裝飾產品。最後build 建造產品。上 p...
設計模式 建造者模式
在gof的23種設計模式中對builder pattern的定義是 將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。從程式角度來說,就是在基類定義某種事物建立的過程或業務流程,在子類進行重寫或是使用基類方法。這樣建立出來的例項不會因為過程或流程的丟失而使業務失敗。舉例來說,...