設計模式個人筆記

2021-09-18 01:27:40 字數 2007 閱讀 4189

1. 模式定義

將乙個類的介面,轉換為客戶期望的另乙個介面。介面卡讓原本不相容的類可以合作無間。

2. 模式類圖

有兩種介面卡模式的實現,一種是物件方式,一種是類方式。物件方式是通過組合的方法,讓介面卡類(adapter)擁有乙個待適配的物件(adaptee),從而把相應的處理委託給待適配的物件。類方式用到多重繼承,adapter 可以看成 target 和 adaptee 型別,先把它當成 adaptee 型別然後例項化乙個 adapter 物件,再把它當成 target 型別的,這樣 client 就可以把這個物件當成 target 的物件來處理。

3. 問題描述

讓鴨子(duck)適配火雞(turkey),duck 有 quack() 方法,而 turkey 只有 gobble() 方法。也就是要讓 turkey 也有 duck 的 quack() 方法。

簡單理解:  火雞只能呼叫火雞方法,,現在鴨子直接呼叫火雞的方法可能嗎?不可以,所以做個介面卡類,這個類裡進行呼叫就可以了

好萊塢原則:別呼叫(打**給)我們,我們會呼叫(打**給)你。這一原則可以防止依賴腐敗,即防止高層元件依賴底層元件,底層元件又依賴高層元件。該原則在模板方法的體現為,只有父類會呼叫子類,子類不會呼叫父類。

6. 鉤子

鉤子(hock):某些步驟在不同實現中可有可無,可以先定義乙個什麼都不做的方法,把它加到模板方法 templtemethod() 中,如果子類需要它就覆蓋預設實現並加上自己的實現。

個人理解:寫個抽象的類,一些抽象方法,讓子類去重寫。

7. **實現

public abstract class caffeinebeverage 

abstract void brew();

abstract void addcondiments();

void boilwater()

void pourincup()

}

public class coffee extends caffeinebeverage

@override

void addcondiments()

}

public class tea extends caffeinebeverage

@override

void addcondiments()

}

public class caffeinebeveragetestdrive 

}

執行結果

boilwater

coffee.brew

pourincup

coffee.addcondiments

1. 模式定義提供一種順序訪問乙個聚合物件中的各個元素的方法,而又不暴露其內部的表示。

2. 模式類圖

客戶類擁有乙個聚合物件和迭代器物件,迭代器物件是聚合物件生成的。只需要迭代器定義好移動的操作,就可以讓聚合物件能夠順序遍歷。

3. **實現

public class aggregate 

}public iterator createiterator()

}

public inte***ce iterator
public class concreteiterator implements iterator 

@override

public boolean hasnext()

@override

public int next()

}

public class client }}

執行結果

012

3456789

設計模式 建造者模式(個人筆記)

一 適用場景以及優缺點 1.適用場景 1 當建立複雜物件的演算法應該獨立於該物件的組成 部分,以及他們的裝配方式時。2 相同的方法,不同的順序,產生不同的事件結果時。3 多個部件或零件,都可以裝配到乙個物件中,但是產生的執行結果又不同時。4 產品類非常複雜,或者產品類中的呼叫順序不同產生了不同的效能...

設計模式 抽象工廠(個人筆記)

一 抽象工廠的應用場景以及優缺點 1 應用場景 如果系統需要多套的 解決方案,並且每套的 解決方案中又有很多相互關聯的產品型別,並且在系統中我們可以相互替換的使用一套產品的時候可以使用該模式,客戶端不需要依賴具體的實現。2 優點 抽象工廠模式將產品的建立工作遲到了具體工廠的子類中,我們宣告工廠類變數...

設計模式個人理解

第八章 模板方法模式 定義 在乙個方法中定義乙個演算法骨架,而將一些步驟延遲到子類中。模板方法使得子類在不改變演算法結構的情況下,重新定義演算法的某些步驟。個人理解 即演算法都封裝到抽象類中,部分細節的實現定義抽象方法或提供預設實現,由子類實現不同的具體操作或覆蓋父類提供的預設方法。優點 將整個演算...