日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

策略模式设计

發(fā)布時間:2025/3/19 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 策略模式设计 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
背景介紹:
  當前有一個鴨子類(duck)它有紅、綠頭鴨(實現(xiàn)類),有可以飛(fly)、叫(quack)以及樣子(display)的方法
需求:增加并設計一個不會飛的塑料鴨以及使用火箭飛行的太空鴨。
最初兩種思路:
  1、繼承設計思維:在duck中增加fly 方法,會導致不需要飛行的鴨子也會飛行而產生問題。缺點:沒有擴展性,不靈活
2、接口或者抽象方法實現(xiàn)設計思維:將fly設計成接口或者抽象方法。其他鴨子實現(xiàn)類實現(xiàn)就好 缺點:如果你寫了10種鴨子后,
  fly 在復寫過程的有的會重復(比如塑料鴨,玩具鴨就會寫重復的不會飛邏輯)。會累死。

下面推出策略模式:
/**策略設計模式的原理解釋:
duck 類(固定不變有叫與顯示的方法)作為基類是變化很少的封裝出來
而可變的就以組合的方式(注入接口) 然后通過多態(tài)的實現(xiàn)來完成。
這樣以后還需要增加不同類型的鴨子以及不同的飛行就不需要改變原有duck的代碼以及之前寫好的代碼
*/
public
abstract class Duck { // 鴨子類//因為每個鴨子的模樣是不一樣的。如:塑料鴨,灰鴨public abstract void display();//面向接口編程,使用組合的方式注入fly 采用開閉原則(原有的系統(tǒng)只做新增不做修改)private Fly fly;public Fly getFly() {return fly;}public void setFly(Fly fly) {this.fly = fly;}public void quack() {System.out.println("呱");} }
public class MallardDuck extends Duck { //綠頭鴨public MallardDuck() {super();super.setFly(new FlyNoWay());//傳入對應對應的飛行實現(xiàn)類 ???直接set 一個實現(xiàn)類?沒看懂這寫法 } public void display() {System.out.println("綠頭鴨");} }public class RedHeadDuck extends Duck { //紅頭鴨public RedHeadDuck() {super();super.setFly(new RocketFly());//注入不同的接口實現(xiàn)類 } public void display() {System.out.println("紅頭鴨");} } public interface Fly { //fly 接口void fly(); } /*** 具體的策略算法實現(xiàn)類* 具體的飛行實現(xiàn)類*/ public class FlyNoWay implements Fly {public void fly() {System.out.println("不會飛");} } /*** 具體的策略算法實現(xiàn)類* 具體的飛行實現(xiàn)類*/ public class RocketFly implements Fly {public void fly() {System.out.println("坐火箭");} } //測試public static void main(String[] args) {/**** 策略模式的理解 根據不同的方式*/Duck duck = new MallardDuck();duck.display();duck.quack();duck.getFly();}

?

轉載于:https://www.cnblogs.com/lanSeGeDiao/p/9362300.html

總結

以上是生活随笔為你收集整理的策略模式设计的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。