建造者模式是將乙個複雜的物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。建立者模式隱藏了複雜物件的建立過程,它把複雜物件的建立過程加以抽象,通過子類繼承或者過載的方式,動態的建立具有復合屬性的物件。
比如建造乙個房子要分為打地基、砌牆、封頂過程,不同型別的房子都需要經歷著三個過程,只是具體實現不同而已。一般方法實現如下。
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 導演類 建造者模式的優點 首先,建造者模式的封裝很好,使用建造者模式可以有效地封裝變化,注意在使用建造者模式的場景中,一般產品類和建造者介面是比較穩定的,...