建造者模式

2021-09-24 23:43:58 字數 2833 閱讀 6401

當乙個類的內部資料過於複雜的時候(通常是負責持有資料的類,比如config、vo、po、entity...),要建立的話可能就需要了解這個類的內部結構,還有這些東西是怎麼組織裝配等一大坨亂七八糟的東西,這個時候就會增加學習成本而且會很混亂,這個時候就想啊想一種什麼法子來管理一下這個類中的資料呢,怎麼在建立的時候讓它按部就班的來,並且**可讀性很好別讓我看花了眼啊,我要的東西也能都很好設定進來,這就是builder模式的應用場景,builder模式可以將乙個類的構建和表示進行分離。

建立者模式又叫建造者模式,是將乙個複雜的物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。

建立者模式隱藏了複雜物件的建立過程,它把複雜物件的建立過程加以抽象,通過子類繼承或者過載的方式,動態的建立具有復合屬性的物件。

在使用者不知道物件的建造過程和細節的情況下就可以直接建立複雜的物件。

例子:造汽車 & 買汽車。

工廠(建造者模式):負責製造汽車(組裝過程和細節在工廠內)

汽車購買者(使用者):你只需要說出你需要的型號(物件的型別和內容),然後直接購買就可以使用了

(不需要知道汽車是怎麼組裝的(車輪、車門、發動機、方向盤等等))

}

// 抽象 builder 類 

public abstract class builder

// 具體 builder 類 

public class mobikebuilder extends builder

@override

void buildseat()

@override

void buildtire()

@override

bike createbike()

} public class ofobuilder extends builder

@override

void buildseat()

@override

void buildtire()

@override

bike createbike()

}

public class director  

public bike construct()

}

public class click  

private void showbike(builder builder)

}

上面示例是 builder模式的常規用法,導演類 director 在 builder模式中具有很重要的作用,它用於指導具體構建者如何構建產品,控制呼叫先後次序,並向呼叫者返回完整的產品類,但是有些情況下需要簡化系統結構,可以把director和抽象建造者進行結合。

public abstract class newbuilder  

}

這樣做確實簡化了系統結構,但同時也加重了抽象建造者類的職責,也不是太符合單一職責原則,如果construct() 過於複雜,建議還是封裝到 director 中

除了上面的用途外,還有另外乙個常用的使用方式,就是當乙個類構造器需要傳入很多引數時,如果建立這個類的例項,**可讀性會非常差,而且很容易引入錯誤,此時就可以利用 builder模式進行重構,重構前示例**:

// 省略 getter 和 setter 方法 

public class computer

} public class newcomputer

private newcomputer(builder builder)

public static final class builder

public builder cpu(string val)

public builder screen(string val)

public builder memory(string val)

public builder mainboard(string val)

public newcomputer build() } }

客戶端:

public class click  

}

上面的示例**只是傳入四個引數,如果引數是十四個甚至更多,builder 模式的優勢將會更加明顯,傳遞引數更加靈活,**具有更高的可讀性.

一般的套路:優點是比較簡單,開發效率高,缺點是如果引數真的很多的話鬼知道每個對應的是什麼意思啊。

builder模式:優點是可以將構造器的setter方法名取成類似注釋的方式,這樣我們可以很清晰的知道剛才究竟設定的什麼值,可讀性較高,缺點是比較冗長。

建造者模式

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

建造者模式

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

建造者模式

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