設計模式05 建造者模式

2021-07-31 11:39:19 字數 2150 閱讀 7238

抽象一點說建造者模式的目的:

將乙個複雜物件的構建與其表示相分離,使得同樣的構建過程可以建立不同的表示。——-《設計模式》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的定義是 將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。從程式角度來說,就是在基類定義某種事物建立的過程或業務流程,在子類進行重寫或是使用基類方法。這樣建立出來的例項不會因為過程或流程的丟失而使業務失敗。舉例來說,...