意圖:將乙個複雜的構建與其表示相分離,使得同樣的構建過程可以建立不同的表示。
主要解決:主要解決在軟體系統中,有時候面臨著"乙個複雜物件"的建立工作,其通常由各個部分的子物件用一定的演算法構成;由於需求的變化,這個複雜物件的各個部分經常面臨著劇烈的變化,但是將它們組合在一起的演算法卻相對穩定。
何時使用:一些基本部件不會變,而其組合經常變化的時候。
如何解決:將變與不變分離開。
關鍵**:建造者:建立和提供例項,導演:管理建造出來的例項的依賴關係。
package
cn.xzc.test.buildermode;/*
* 建造者模式 建立者模式的一種
* 複雜的類通過 簡單的類 組合而來**
* */
public abstract class
builder
public class
product
public void
setbuilda
(string builda)
public
string
getbuildb
() public void
setbuildb
(string buildb)
public
string
getbuildc
() public void
setbuildc
(string buildc)
public
string
getbuildd
() public void
setbuildd
(string buildd)
@override
public
string
tostring
() ';}
} package
cn.xzc.test.buildermode02.demo01
;public class
worker
extends
builder
@override
void
buildea
() @override
void
buildeb
() @override
void
buildec
() @override
void
builded
() @override
product
getproduct()}
package
cn.xzc.test.buildermode02.demo01;/*
* 指揮 核心 指定生產者按一定順序去建造出產品
* */
public class
director }
public class
testforbuildmode }
通常我們的建造順序不需要寫死,建造的內容也需要傳參來決定,使用者作為呼叫者自己決定順序和具體傳入引數。
/**
建造者模式 建立者模式的一種
* 複雜的類通過 簡單的類 組合而來
**
新增傳入引數和返回值
** */
public abstract class
builder /*
* 實現工人類來執行產品生產 返回值為
this
實現鏈式程式設計
* */
public class
worker
extends
builder
@override
builder
buildea
(string msg)
@override
builder
buildeb
(string msg)
@override
builder
buildec
(string msg)
@override
builder
builded
(string msg)
@override
product
getproduct()}
package
cn.xzc.test.buildermode02.demo02
;public class
product
public void
setbuilda
(string builda)
public
string
getbuildb
() public void
setbuildb
(string buildb)
public
string
getbuildc
() public void
setbuildc
(string buildc)
public
string
getbuildd
() public void
setbuildd
(string buildd)
@override
public
string
tostring
() ';}
} 最後測試
public class
testforbuildmode }
溫故而知新
堆排 建立堆,維護堆的屬性 一次拿掉乙個,然後維護屬性,二分的結構 使得維護屬性只要logn的時間 冒泡也是一次拿走乙個 但是線性的結構 每次沒有節省時間 快排 一次確定 乙個值的位置,然後二分,縮小問題的範圍。floyd找最短 一次更新 將狀態改為經過固定點的 最短距離 迴圈 遍歷每個點,則結果為...
溫故而知新(一)
一 c 基礎語法 1.注釋符 b.解釋所寫的 2.vs中常用的快捷鍵 3.變數 用來在計算機中儲存資料 b.要給儲存空間起乙個有意義的名字,方便我們以後的使用 b.變數型別 變數名 值 4.命名規則 5.號的使用 6.佔位符的使用 先挖坑,再填坑 異常 exception 在程式執行的過程中,由於某...
C 陣列 溫故而知新
using system using system.collections.generic using system.linq using system.text namespace 陣列 陣列初始化器只能在宣告陣列變數時使用,不能在宣告陣列之後使用 int iii new int 用花括號初始化陣...