天天看點

Java設計模式之 建造者模型,簡單易于了解

建造者模型

一、概念:

建造者模式是設計模式的一種,将一個複雜對象的建構與它的表示分離,使得同樣的建構過程可以建立不同的表示。

實用範圍:

1 當建立複雜對象的算法應該獨立于該對象的組成部分以及它們的裝配方式時。

2 當構造過程必須允許被構造的對象有不同表示時。

折疊角色

在這樣的設計模式中,有以下幾個角色:

Java設計模式之 建造者模型,簡單易于了解

1 builder:為建立一個産品對象的各個部件指定抽象接口。

2 ConcreteBuilder:實作Builder的接口以構造和裝配該産品的各個部件,定義并明确它所建立的表示,并 提供一個檢索産品的接口。

3 Director:構造一個使用Builder接口的對象。

4 Product:表示被構造的複雜對象。ConcreteBuilder建立該産品的内部表示并定義它的裝配過程,包含定義組成部件的類,包括将這些部件裝配成最終産品的接口。

二、代碼解析

1、以建造房子為例,首先建築一個房子對象,裡面有三個屬性

Java設計模式之 建造者模型,簡單易于了解

2、建造一個房子建築者接口,裡面包括建房子要建的三種屬性的方法。

Java設計模式之 建造者模型,簡單易于了解

3、建立一個類去實作建造者接口

Java設計模式之 建造者模型,簡單易于了解
Java設計模式之 建造者模型,簡單易于了解

4、引進一個設計者,簡化用戶端的調用,這個設計者負責設計建造房子的操作過程和業務處理。

Java設計模式之 建造者模型,簡單易于了解
Java設計模式之 建造者模型,簡單易于了解
Java設計模式之 建造者模型,簡單易于了解

5、現在建立一個用戶端,實作建造房子的過程,先定義一個方法的建造者,再定義一個設計者,直接調用實作建房子的過程。

Java設計模式之 建造者模型,簡單易于了解

三、建造者模式的優缺點

建造者模式的優點:

1、用戶端不必知道産品内部的組成細節,将産品本身與産品的建造過程解耦,使得相同的建造過程可以建造不同的産品對象。

2、每個具體建築者對象都是獨立的,與其他的具體建造者無關,是以很友善地替換具體建築者或者增加新的具體建造者。

3、可以更加精細地控制産品的建造過程。将複雜産品的建立步驟分解在不同的方法中,使得建立過程更加清晰,也更加友善使用程式來控制建立過程。

4、增加新的具體者無需修改原有類庫的代碼,系統擴充友善,符合開閉原則。

建造者模式的缺點:

1、産品之間差異性很大的情況:建造者橫式所建立的産品一般具有較多的共同點,其組成部分相似,如果産品之間的差異性很大,則不适合使用建造者模式,是以其使用範圍受到一定的限制。

2、産品内部變化很複雜的情況:如果産品的内部變化複雜,可能會導緻需要定義很多具體建造者類來實作這種變化,導緻系統變得很底大。

繼續閱讀