模版模式(template)
介紹
模版模式:模版模式在抽象類或父類中抽象出演算法步驟作為模版,模版的具體推遲到子類實現。
·模版模式在父類或抽象類中定義了乙個演算法骨架,並在父類或抽象類中實現共同的部分,各個不同的步驟由不同的子類分別實現;
·模版模式在父類的演算法步驟中定義鉤子(hook),在子類中判斷並定義一些不是非通用步驟;
·模版模式與策略模式的不同之處在於,策略模式是針對多個不同的演算法,而模版演算法是針對乙個演算法的不同步驟,在模版模式中,只有乙個演算法。
場景
·多個演算法有多個共同之處,但某些步驟略微不同;
·各子類步驟順序一致,但步驟的具體實現有所不同;
實現
1.有發郵件和發簡訊兩種通訊方式;
2.它們都需要目標資訊,格式化正文、填寫傳送方資訊,但實現不同;
3.在資訊類中抽象三個步驟,具體的處理方式由兩種通訊方式各自實現;
4.傳送資訊時呼叫資訊類中的傳送方式,傳送方法會按照順序自動呼叫對應的步驟;
迭代器模式(iterator)
介紹
迭代器模式:迭代器模式允許呼叫者在不知道類內部實現的情況下遍歷類元素。
·迭代器介面常用方法有length(),next(),previous(),remove()等;
·各類在內部實現迭代器介面,用對應方法操作元素;
·呼叫者不考慮內部實現,呼叫迭代器介面即可;
場景
·類使用不同的資料結構儲存資料;
·需要對不同的資料型別進行遍歷等操作;
實現
1.使用slice儲存一列戰馬,使用map儲存一列士兵;
2.戰馬和士兵結構都實現了迭代器介面;
3.獲取戰馬數和士兵數,遍歷戰馬和士兵,呼叫迭代器介面即可;
組合模式(composite)
介紹
組合器模式:使用一種元件抽象來同時表達集合與元素,使用統一的介面來管理集合和元素。
·組合模式通常為樹結構,父節點和子節點具有同樣的抽象和介面;
·在操作集合時,會同時操作集合所屬的具體元素;
·通常給組合模式新增乙個迭代器來完成組合結構的迭代;
場景
·管理的多個物件構成樹型層級結構;
·操作高層級的物件時,需要同時操作其所屬的下級物件,如介面視窗等;
實現
1.將軍、隊長、士兵構成樹型層級結構,且他們都是戰士,擁有戰鬥方法;
2.每位展示都儲存著自己的下級名單,沒有下級時忽略;
3.每個人在戰鬥時,都會率領著下級戰鬥;
狀態模式(state)
介紹
狀態模式:狀態模式抽象出乙個事物的狀態作為類,解耦事物和不同的狀態下的行為;
·狀態模式通過替換狀態物件作為狀態轉換的方式;
·狀態物件實現根據狀態動作的介面,可以根據不同的動作做出對應的反應;
·狀態模式和策略模式的實現相似,但狀態模式是對類內部狀態做出改變,而策略模式是針對演算法封裝;
場景
·事物有多種狀態,且可以相互轉換;
·事物多種狀態下對同一動作做出的行為不同;
實現
1.植物有幼苗、開花和成熟三種狀態,且它們會通過澆水和收穫的動作進行相互轉換;
2.幼苗和開花時不能收穫,只能澆水,成熟狀態只能收穫,不需要澆水;
3.定義三種狀態,和它們對不同動作時的行為,植物通過三種物件的替換來進行狀態轉換;
**模式(proxy)
介紹
**模式:給物件提供乙個**,由**物件控制對原物件的呼叫;
·**模式為乙個物件建立另外乙個類作為其訪問的介面,所有對真實物件的請求都通過**當物件完成;
·**模式可以被用作:遠端**、虛擬**,安全**,指標引用,延遲載入;
場景
·物件無法被直接訪問時;
·物件過大、初始化較慢;
·物件不必要立刻初始化,可使用預設值代替;
實現
1.小名給暗戀物件寫了一封信,在等回信;
2.郵遞員是個非常忙的人,來不及去收取回信;
3.小名好聲好氣向快遞員要回信時,郵遞員都推託說自己要去取;
4.小名發怒了,郵遞員終於抽時間去取了信給小名;
5.此信中郵遞員就是**模式中的**,她實現了懶載入;
6.回信內容見原始碼
橋接模式(bridge)
介紹
橋接模式:將事務的多個緯度都抽象出來以解耦抽象與實際之間的繫結關係,使抽象和實際向著不同緯度改變;
·橋接模式通過物件的組合來解決事物的多維度變化問題,以替代多繼承的不靈活;
·橋接模式可以輕易在多維度上擴充套件,為不改變原有模式;
·橋接模式與策略模式的不同之處:策略模式是針對乙個不變的主題替換抽象演算法,而橋接模式是策略磨死的高緯度狀態,它的主題也可能會被替換;
場景
·某事物在多個緯度上都有變化;
·無法使用多繼承或使用多繼承會很不靈活;
實現
1.作畫時可以使用鉛筆和原子筆等不同的筆,也可以在宣紙或普通a4紙;
2.抽象出筆和紙兩種物件;
3.自由組合筆和紙進行作畫;
建造者模式(builder)
介紹
建造者模式:建造者模式分離建立複雜物件的過程和細節,使得同樣的建立過程能建立不同的物件。
·建造者模式將建立物件部件的一般過程抽象出介面,而由不同的建造者類實現具體的介面,實現過程的步驟;
·通過建造者,呼叫者不用考慮物件建立過程的細節,而建造者也可以被靈活替換;
·與模版模式的區別:建造者模式使用類的組合進行物件的建立,而模版模式使用類的繼承實現物件的具體構造;
·與工廠模式的區別,工廠模式會返回乙個具體類,而建造者模式會建造出乙個由多個類組裝而成的完整類;
場景
·物件的建立包含其他物件為類元素,建立過程複雜;
·多個複雜物件的建立過程具有高度相似性;
實現
1.中國式建築有金色屋頂和紅色大門,而意式建築有圓頂和白色大門;
2.中國建築師和意式建築師分別擅長建造不同型別的建築;
3.我們在蓋不同型別的房子時先建立乙個建築師,再用建築師去建立對應風格的房子;
參考:
Golang 設計模式
策略模式 strategy 簡介 策略模式 將演算法或操作抽象成實現共同介面 可以被替換的類,實現邏輯和具體演算法的解耦。將各種行為抽象成演算法,封裝演算法為物件 演算法實現共同介面,呼叫者呼叫時不考慮演算法具體實現,呼叫介面方法即可 呼叫者可隨時替換此演算法物件 應用場景 多個方法選擇一使用,且它...
Golang設計模式 工廠模式
定義乙個用於建立物件的介面,讓子類界定例項化哪個類。工廠方法使乙個類的例項化延遲到子類。簡單工廠模式的最大優點在於工廠類中包含了必要的邏輯判斷,根據客戶的選擇動態例項化相關的類,對於客戶端來說,去除了與具體產品的依賴。如果是翻譯,讓客戶端不管用哪個類的例項,只需把翻譯型別 int 1,2,3 給工廠...
設計模式golang 工廠模式
建立物件的介面,讓其子類自己決定例項化哪個類,工廠模式使其建立過程延遲到子類進行。1.產品抽象介面 2.工廠建立產品方法 3.產品例項 選銀行借錢的例子,資質方法根據你的收入等其他情況給你選擇銀行。抽象產品介面 type bank inte ce 具體銀行產品例項 type bjbank struc...