【正文】
yDuck()。 } } 用戶看到的只是實現(xiàn)了 Duck接口的 TurkeyAdapter 25 適配器模式的定義 ?適配器模式 Adapter Pattern:將一個類的接口,轉(zhuǎn)換成客戶期望的另一個接口,適配器讓原本接口不兼容的類可以合作無間 ? 通過適配器,可以讓客戶從實現(xiàn)的接口中解耦 ? OO原則:使用對象組合 26 內(nèi)容安排 ?設(shè)計模式舉例 ? 策略模式 ? 適配器模式 ? 工廠模式 ? 單件模式 ? 模板方法模式 27 關(guān)于針對接口編程 ?OO原則 ? 針對接口編程,不要針對實現(xiàn)編程 ? new運(yùn)算符:實例化一個具體類? ? 當(dāng)有一群相關(guān)的具體類時,往往需要根據(jù)條件實例化某個具體類 Duck duck。 } static void testDuck(Duck duck) ()。 Duck turkeyAdapter = new TurkeyAdapter(turkey)。 } public void quack(){ ()。 } ?火雞子類 public class WildTurkey implements Turkey{ public void gobble() {.....} public void fly() {......} } 22 讓火雞冒充鴨子 ?現(xiàn)在缺少鴨子對象,想用火雞對象來冒充 ? 接口不同,不能直接代替 ? 通過適配器來解決 public class TurkeyAdapter implements Duck{ Turkey turkey。 } ?鴨子子類 public class MallardDuck implements Duck{ public void quack() {.....} public void fly() {......} } 21 火雞類 ?火雞接口 public interface Turkey{ publilc void gobble()。 } } D u c k f ly B e h a v io r : F ly B e h a v io r q u a c k B e h a v io r : Q u a c k B e h a v io r+ s w im ( )+ d is p la y ( )+ p e r f o r m Q u a c k ( )+ p e r f o r m F ly ( )+ s e tF ly B e h a v io r ( f ly : F ly B e h a v io r )+ s e tQ u a c k B e h a v io r ( q : Q u a c k B e h a v io r )15 整體結(jié)構(gòu) 16 “有一個”比“是一個”更好 ?有一個 Has- A ? 每個鴨子都有一個 FlyBehavior和 QuackBehavior,將飛行和叫的行為委派給它們處理 ? 與繼承不同,鴨子的行為通過組合( position)其它對象得到 ? 組合具有很大的彈性,封裝易變的行為部分,甚至可以動態(tài)改變行為 ?設(shè)計原則 ? 多用組合,少用繼承 17 策略模式的定義 ?策略模式 Strategy Pattern:定義了算法族,分別封裝起來,讓它們乊間可以互相替換,此模式讓算法的變化獨(dú)立于使用算法的客戶 ? 算法族:可以是具體的算法或行為,如不同的飛行行為和叫法 18 內(nèi)容安排 ?設(shè)計模式舉例 ? 策略模式 ? 適配器模式 ? 工廠模式 ? 單件模式 ? 模板方法模式 19 適配器? Adapter ?生活中的適配器 ? 要在歐洲國家使用美國制造的筆記本,需要使用一個交流的適配器,通過適配器改變了插座的接口 ?面向?qū)ο筮m配器 20 簡單的鴨子類設(shè)計 ?鴨子接口 public interface Duck{ publilc void quack()。 } ... } 14 動態(tài)綁定鴨子行為 public class Duck{ public void setFlyBehavior(FlyBehavior fb)(){ flyBehavior=fb。 } } D u c k f ly B e h a v io r : F ly B e h a v io r q u a c k B e h a v io r : Q u a c k B e h a v io r+ s w im ( )+ d is p la y ( )+ p e r f o r m Q u a c k ( )+ p e r f o r m F ly ( )public class MallardDuck extends Duck{ public MallardDuck(){ quackBehavior = new Quack()。 12 鴨子行為類的設(shè)計 13 鴨子類的設(shè)計 public class Duck{ QuackBehavior quackBehavior。1 內(nèi)容安排 ?設(shè)計模式舉例 ? 策略模式 ? 適配器模式 ? 工廠模式 ? 單件模式 ? 模板方法模式 2 從模擬鴨子游戲開始 ?Joe成功開發(fā)了模擬鴨子游戲 SimUDuck ? 采用 OO技術(shù) ? Duck中 display抽象方法 D u c k+ q u a c k ( )+ s w im ( )+ d is p la y ( )M al l ar d D u c k+ d is p la y ( )R e d h e ad D u c k+ d is p la y ( )