建造者模式

2021-09-29 01:19:03 字數 3539 閱讀 7020

建造者模式:也稱生成器模式,其主要的作用就是將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。

建造者模式和工廠模式很容易混淆,我們要注意的是工廠模式注重的是整體物件的建立方法,而建造者模式注重的是部件構建的過程,建造者模式是通過一步一步地精確構造建立乙個複雜的物件。

我們之前也介紹過工廠模式,我們在其中是使用了手機為例,我們發現我們工廠模式通過同一方法進行建立的手機物件是千篇一律的,而我們的建造者模式就可以通過同樣的構建過程來建立不同表示。

這裡我們還是以手機為例,我們來使用建造者模式來建立乙個物件,如下

public

class

phone

然後我們來建立乙個抽象的建造者,我不自己建立物件,而是由建造者為我們建立物件

public

abstract

class

builder

public

void

setmodel

(string model)

public

abstract phone getphone()

;}

這裡我們在定義兩個手機廠商,如華為、三星的組裝者,如下

public

class

huaweiphonebuilder

extends

builder

}

public

class

samsungphonebuilder

extends

builder

}

下面我們再來定義乙個導演類,由導演類來給我們指定有哪些產品

public

class

director

public

static phone getsamsungphone()

}

以上我們就完成了乙個簡答的建造者模式,我們進行測試如下:

這裡有人可能會說,不是說建造者模式同樣的構建過程可以建立不同的表示麼,是的,這裡我們在生成者中**把手機的型號直接指定了,這裡我麼你可以不指定,通過引數傳遞進去,然後我們在導演類中就可以指定各種型號去生成不同型號的手機了。這裡我們就不進行修改了,我們再看下乙個例子,和我們剛剛說的修改一樣的,就是在導演類中指定需求後,再去生成。

public

class

computer

//電腦開機音效

private

void

sound()

//開機

public

void

boot()

}//將傳遞過來的值傳遞到類中

public

void

setsequence

(list

sequence)

}

然後我們來看看其建造類

public

abstract

class

builder

public

class

computerbuilder

extends

builder

@override

public computer getcomputer()

}

然後我們的導演類中可以指定我們的需求,我們在導演類中甚至還可以利用生成者生成更多不同需求的電腦,如只有開機動畫等等。

public

class

director

public computer getbcomputer()

}

最後我們進行測試,生成出乙個a型別的電腦看看

最後再說乙個建造者模式在日常工作中非常使用的方法,就是我們有些在業務中,需要建立乙個屬性非常多的類,我們一般直接用getter/setter方法,就十分的不優雅,如下:

public

class

user

public

class

client

這裡我們就可以使用建造者模式,最後就可以達到鏈式程式設計的風格,如下:

public

final

class

userbuilder

public

static userbuilder getuser()

public userbuilder name

(string name)

public userbuilder ***

(string ***)

public userbuilder age

(int age)

public userbuilder phone

(string phone)

public userbuilder email

(string email)

public userbuilder address

(string address)

public user build()

}

public

class

client

}

不過要是乙個類屬性太多,這樣為它專門寫乙個建造者類,也太麻煩了,還不如直接用setter方法進行賦值,放心這裡肯定不讓我們直接寫乙個建造者類,不然也太耽誤時間了,這裡我們可以直接用外掛程式生成,然後我們可以在其中做一些我們想要的修改即可。

外掛程式安全完成後,我們使用快捷鍵 alt + insert 鍵就可以直接生成建造者類了,是不是很方便

上述介紹的 builder generator 外掛程式生成的類是單獨的乙個類,如果不想讓類的數量增加,也可以使用內部類的方法來解決,同樣也是有其他外掛程式可以幫助我們生成的,如innerbuilder

建造者模式

1.定義 將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。2.uml 類圖 結構 該結構 演示了複雜物件被一步一步建立的建造者模式。builder pattern structural example using system using system.collection...

建造者模式

軟體領域中的設計模式為開發人員提供了一種使用專家設計經驗的有效途徑。設計模式中運用了物件導向程式設計語言的重要特性 封裝 繼承 多型,真正領悟設計模式的精髓是可能乙個漫長的過程,需要大量實踐經驗的積累。最近看設計模式的書,對於每個模式,用c 寫了個小例子,加深一下理解。主要參考 大話設計模式 和 設...

建造者模式

建造者模式將複雜物件的構建和它的表示分離,使同樣的構建過程能夠構建出不同的表示。以乙個建造小人為例子,可以建造2種小人,胖子和瘦子 include using namespace std class builder 抽象建造者類 class buildthinman public builder 瘦...