構建者模式 Builder Pattern

2021-09-24 18:07:18 字數 4343 閱讀 7231

對於元件複雜的例項時,很難一氣呵成,而且例項形式不定,會經常性變化,這時候就需要建立組成例項的各個部分,然後根據具體需求,分階段將其組裝起來,如同活字印刷術,或者建造建築。

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...