設計模式 建造者模式

2021-10-02 15:34:03 字數 3744 閱讀 3916

建造者模式是將乙個複雜的物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。建立者模式隱藏了複雜物件的建立過程,它把複雜物件的建立過程加以抽象,通過子類繼承或者過載的方式,動態的建立具有復合屬性的物件。

比如建造乙個房子要分為打地基、砌牆、封頂過程,不同型別的房子都需要經歷著三個過程,只是具體實現不同而已。一般方法實現如下。

abstracthouse抽象類封裝了建造房子的過程以及過程的執行順序:

public

abstract

class

abstracthouse

}

建造乙個普通房子的類:

public

class

commonhouse

extends

abstracthouse

@override

public

void

buildwalls()

@override

public

void

roofed()

}

使用:

public

static

void

main

(string[

] args)

建造者模式的四個角色:

它們之間的uml圖:

產品角色:

public

class

house

public

void

setbaise

(string baise)

public string getwall()

public

void

setwall

(string wall)

public string getroofed()

public

void

setroofed

(string roofed)

}

抽象建造者:

// 抽象的建造者

public

abstract

class

housebuilder

}

具體建造者:

public

class

commonhouse

extends

housebuilder

@override

public

void

buildwalls()

@override

public

void

roofed()

}

public

class

highbuilding

extends

housebuilder

@override

public

void

buildwalls()

@override

public

void

roofed()

}

指揮者:

//指揮者,這裡去指定製作流程,返回產品

public

class

housedirector

//通過setter 傳入 housebuilder

public

void

sethousebuilder

(housebuilder housebuilder)

//如何處理建造房子的流程,交給指揮者

public house constructhouse()

}

使用:

public

static

void

main

(string[

] args)

//1. 讀取配置檔案

inputstream inputstream = resources.

getresourceasstream

("sqlmapconfig.xml");

//2. 建立sqlsessionfactory工廠

sqlsessionfactorybuilder builder =

newsqlsessionfactorybuilder()

; sqlsessionfactory factory = builder.

build

(inputstream)

;//3. 使用工廠生產sqlsession物件

sqlsession sqlsession = factory.

opensession()

;//4. 使用sqlsession物件建立dao介面的**物件...

//5. 通過**物件執行方法...

//6. 釋放資源...

sqlsessionfactorybuilder 部分原始碼(jdk8):

public

class

sqlsessionfactorybuilder

public sqlsessionfactory build

(reader reader, string environment)

public sqlsessionfactory build

(reader reader, properties properties)

//提供了很多build方法...

//真正處理build邏輯的方法

public sqlsessionfactory build

(reader reader, string environment, properties properties)

catch

(exception e)

finally

catch

(ioexception e)}}

public sqlsessionfactory build

(configuration config)

使用過mybatis的朋友應該都見過上面這段**,在建立sqlsessionfactory工廠的時候,將讀取到的配置檔案傳入build()方法中,builder物件會根據配置檔案流的不同而呼叫不同的build()方法,真正執行建立sqlsessionfactory工廠的邏輯由build()方法內部邏輯處理。

在建造房子的例子中,客戶端只需要關心例項化不同的房子型別物件,然後將該物件傳遞給指揮者,由指揮者內部方法執行建造房子的具體流程並返回房子物件。建立sqlsessionfactory工廠的方式類似,客戶端只需關心以他想要的方式讀取配置檔案生成不同的物件,將該物件傳遞給sqlsessionfactorybuilder物件的build()方法,由該方法處理內部邏輯,最後返回給使用者sqlsessionfactory工廠物件。

設計模式 建造者模式

在gof的23種設計模式中對builder pattern的定義是 將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。從程式角度來說,就是在基類定義某種事物建立的過程或業務流程,在子類進行重寫或是使用基類方法。這樣建立出來的例項不會因為過程或流程的丟失而使業務失敗。舉例來說,...

設計模式建造者模式

今天看了乙個設計模式。總結下,以免忘了。如何引入建造者模式的呢?作者舉了個例子。建造小人。當然需要 頭,左手,右手,左腳,右腳,軀幹。建造的過程使用 使用類裡面的方法就行了。但是如果需要乙個胖的小人,乙個瘦的小人呢?就需要重新構造乙個胖人類,乙個瘦人類。當然 使用者還需要自己處理構造的過程。這樣 就...

設計模式 建造者模式

定義 將乙個複雜的物件的構建與它的表示分離,是的同樣的構建過程可以建立不同的表示。包括的要素 1 產品類 2 抽象建造者或者介面 3 建造者 4 導演類 建造者模式的優點 首先,建造者模式的封裝很好,使用建造者模式可以有效地封裝變化,注意在使用建造者模式的場景中,一般產品類和建造者介面是比較穩定的,...