對於元件複雜的例項時,很難一氣呵成,而且例項形式不定,會經常性變化,這時候就需要建立組成例項的各個部分,然後根據具體需求,分階段將其組裝起來,如同活字印刷術,或者建造建築。
builder類:
/**
* @author jay
* @date 2019/6/25 22:41
* @description 宣告編寫文件方法的抽象類
*/public
abstract
class
builder
director類:
將抽象父類或者介面作為引數傳遞,實現解耦。方法中具體制定了整個例項的拼接的規範,如同設計圖紙,規定每一塊材料如何具體拼接。
/**
* @author jay
* @date 2019/6/25 22:42
* @description 使用bulider中宣告方法寫文件
*/public
class
director
/** * 編寫文件
*/public
void
construct()
);builder.
makestring
("晚上好");
builder.
makeitems
(new
string
);builder.
close()
;}}
textbuilder類:
繼承抽象父類,具體實現其中的抽象方法,如同建築中將每一塊磚,每乙個模型造好,然後設計者利用這些元件區設計整個建築。
/**
* @author jay
* @date 2019/6/25 22:44
* @description builder子類, 純文字寫文件
*/public
class
textbuilder
extends
builder
/** * 內容
** @param str
*/@override
public
void
makestring
(string str)
/** * 條目
** @param items
*/@override
public
void
makeitems
(string[
] items)
buffer.
("\n");
}@override
public
void
close()
/** * 輸出文件
** @return
*/public string getresult()
}
main:
/**
* @author jay
* @date 2019/6/25 22:51
* @description
*/public
class
main
}
builder(建造者)
定義用來生成例項方法的介面,其中定義各種元件。
concretebuilder(具體建造者)
具體實現介面中的方法,定義了在生成例項時實際被呼叫的方法,每乙個元件的具體實現.
其中還有獲取最終結果的方法。
director(監工)
負責使用builder介面來生成例項,接收builder引數,只呼叫builder介面中被定義的方法,不論concretebuilder中如何具體實現元件,都可以正常實現,就如同設計圖紙一樣,不管元件如何具體實現,只要實現了介面,都可以通過介面方法來進行組裝,介面,是一種規範!
上述例子中,可以將director類省略,直接生成例項,通過鏈式結構,隨意組裝物件,並不需要通過修改director中的物件生成方法,從而進一步解耦。
builder:
/**
* @author jay
* @date 2019/6/25 23:03
* @description 宣告編寫文件方法的介面
*/public
inte***ce
builder
textbuilder類:
/**
* @author jay
* @date 2019/6/25 23:06
* @description
*/public
class
textbuilder
implements
builder
@override
public builder maketitle
(string title)
@override
public builder makestring
(string str)
@override
public builder makeitems
(string[
] items)
buffer.
("\n");
return
this;}
@override
public builder close()
public string getresult()
}
main
/**
* @author jay
* @date 2019/6/25 23:11
* @description
*/public
class
main).
makeitems
(new
string
).maketitle
("再加乙個標題").
makestring
("最後乙個字元").
close()
; system.out.
println
(tb.
getresult()
);}}
(這是乙個標題)
#############################
$這是乙個字串
##這是第一條資料
##這是第二條資料
##這是第三條資料
##這是第四條資料
(再加乙個標題)
#############################
$最後乙個字元%%
%%%%
%%%%
%%%%
%%%%
%%%%
%%%%
%%
省略制定設計圖紙的類,直接在測試類中生成具體所需的類,實現鏈式呼叫,進一步解耦,例項生成也更為靈活,不過每乙個方法都會返回例項,並且為公有方法,外界可以直接呼叫,因此可以改進使用內部類,更為安全。
/**
* @author jay
* @date 2019/6/25 23:14
* @description
*/public
class
student
/** * 建立靜態內部類
* 屬性都有預設值,若是未定義則是預設值,再次定義會將其覆蓋
*/public
static
class
bulider
public bulider heiht
(int val)
public bulider size
(int val)
public bulider name
(string val)
public student bulid()
}private
student
(bulider bulider)
public
static
void
main
(string[
] args)
}
to github 構建者模式
定義 從乙個簡單物件一步一步構造複雜物件 優點及使用 list 僅僅通過指定的型別和內容構建複雜物件,而且隱藏構造的實現細節 解耦通過物件元件構造乙個複雜物件的過程 分離構造和顯示的 通過構造過程達到良好的控制 抽象工廠 重點是在工廠模式 簡單工廠或者複雜工廠 而構建者模式重點是由簡單物件構建複雜物...
構建者模式
目的 建立複雜物件 當乙個複雜物件由n個物件組成時,需要進行一系列的拆分,進行組裝,形成大的物件。比如 當建立乙個電腦物件時,電腦是由一系列的元件組合而成,比如滑鼠 鍵盤 顯示器,那麼需要獲取最終的物件,需要先建立一些小的物件。用實際專案中的例子舉例如下 mybatis 在構建乙個sqlsessio...
設計者模式 構建者模式
一 介紹 場景 建造乙個複雜的產品。比如 神舟飛船,iphone,這個複雜的產品建立,有這樣乙個問題需要處理 裝配這些子元件,是不是有個步驟問題?實際開發中,需要的物件,在構建時,也非常複雜,有很多步驟需要處理。建造者模式的本質 分離物件子元件的單獨構造 由builder來負責 和裝配 由direc...