Chapter3: 策略模式(Strategy Pattern)
文章推薦指數: 80 %
1.Strategy Pattern. 2.Strategy Pattern Example ... 若使用策略模式來套用上述範例, 則可以解決繼承所帶來的問題, 也可以重複使用已經寫好的程式碼:. DDDesignPatternSearch…DDDesignPatternIntroductionChapter1:MVVMChapter2:觀察者模式(ObserverPattern)Chapter3:策略模式(StrategyPattern)Chapter4:單例/獨體模式(Singleton)Chapter5:裝飾者模式(DecoraterPattern)Chapter6:命令模式(CommandPattern)Chapter7:MVCPoweredByGitBookChapter3:策略模式(StrategyPattern)Thissectioncontainthefollowingitems:1.StrategyPattern2.StrategyPatternExample1.StrategyPattern策略模式所要解決的問題(痛點)1.在一個專案中的不同物件,如果其80%屬性相同,但在某些方面有差異,若全部分為不同的類別來寫,勢必會造成維護不易及程式碼不一致的問題.2.在一個專案中的不同物件,其屬性有互相重複使用的情形.例如有三個動物,A,B的叫聲相同,B,C的飛行方式相同,如果分別實作三個class,則會有很多function是重複的.我們已經知道code重複的後遺症:維護不易,無法維持一致性.3.如果為了解決2的問題,使用繼承,考量下面一種情況可能會發生:A動物並不會飛,D動物也不會叫,這麼一來必須在這兩個類別的這些function中取消繼承而來的行為,一個漏掉就會變成bug;而且重複的function還是必須得複製貼上,如A,B的叫聲相同,一樣會有維護不異,無法維持一致性的問題.策略模式的核心概念1.找出程式中可能需要變動之處,把他們獨立出來,不要與那些不需要更動的程式碼混在一起.例如:可以這樣拆分class:2.寫程式是針對介面(超類別)而寫,而不是針對實踐方法而寫介面,超類別,多型:實體化的動作不再需要程式碼中僵化固定成某型態,而是在runtime時才決定:1Animalanimal=newdog();2animal.makeSound();Copied!合成代替繼承若使用策略模式來套用上述範例,則可以解決繼承所帶來的問題,也可以重複使用已經寫好的程式碼:2.StrategyPatternExample:以Javascript為例:1.以物件導向模式的寫法實作:架構上可分為策略物件與主體物件1//策略類別2varanimalA=function(){};3animalA.prototype.bark=function(){4return"呱呱"5}6animalA.prototype.fly=function(){7return"展翅高飛"8}910varanimalB=function(){};11animalB.prototype.bark=function(){12return"呱呱"13}14animalB.prototype.fly=function(){15return"滑翔"16}1718varanimalC=function(){};19animalC.prototype.bark=function(){20return"嘰嘰"21}22animalC.prototype.fly=function(){23return"滑翔"24}2526//主體類別27varanimal=function(){28this.animal=null;29}30animal.prototype.setType=function(animal){31this.animal=animal;32}33animal.prototype.bark=function(){34console.log(this.animal.bark());35}36animal.prototype.fly=function(){37console.log(this.animal.fly());38}3940//test41varlittleAnimal=newanimal();42littleAnimal.setType(newanimalA());43littleAnimal.bark();44littleAnimal.fly();Copied!2.以Javascript的寫法實作1//2.以Javascript的寫法實作2//策略物件3varbarks={4"animalA":function(){5return"呱呱"6},7"animalB":function(){8return"呱呱"9},10"animalC":function(){11return"嘰嘰"12}13}1415varflys={16"animalA":function(){17return"展翅高飛"18},19"animalB":function(){20return"滑翔"21},22"animalC":function(){23return"滑翔"24}25}2627//主體物件28varaction=function(actions,type){29console.log(actions[type]());30}3132action(barks,"animalA")33action(flys,"animalA")Copied!PreviousChapter2:觀察者模式(ObserverPattern)NextChapter4:單例/獨體模式(Singleton)Lastmodified2yragoCopylinkContentsThissectioncontainthefollowingitems:1.StrategyPattern2.StrategyPatternExample:
延伸文章資訊
- 1這可能是你第一個接觸到的Design Pattern - 叡揚資訊
簡介這次要跟大家介紹的是Composite Pattern,這是GoF(Gang of Four)經典 ... 此範例是採用C#實作簡易版的公司職員管理,下圖為UML類別圖,僅有2個 ...
- 2以Java 程式範例來探討Design Pattern:Factory Method
以 Java 程式範例來探討 Design Pattern: Factory Method. 作者:李元豪. 使用的時機與目的:. 當我們撰寫應用程式時,如果無法明確地知道要產生的類別,需使用那...
- 3Chapter3: 策略模式(Strategy Pattern)
1.Strategy Pattern. 2.Strategy Pattern Example ... 若使用策略模式來套用上述範例, 則可以解決繼承所帶來的問題, 也可以重複使用已經寫好的程式碼:.
- 4工廠模式Factory · 設計模式學習筆記
工廠模式Factory Pattern. 目的:提供一個工廠介面,將產生實體的程式碼交由子類別各自實現. 進化的新手村. 剛才的簡單工廠模式因為只有一個工廠,要新增產品種類要 ...
- 5設計模式學習筆記- Study Design Pattern In Java
... 模式的聖經Design Patterns : Elements of Re-usable Object-Oriented Software,發現這本書很難, 只好先放棄,真正開始是從大話...