日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

(一)策略模式

發布時間:2025/3/21 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (一)策略模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

策略模式定義了算法族,分別封裝起來,讓它們之間可以互相替換,此模式讓算法的變化獨立于使用算法的客戶。

設計原則:1、找出應用中可能需要變化之處,把他們獨立出來,不要和那些不需要變化的代碼混在一起。(把變化的飛行行為、呱呱叫行為從不變的鴨子類中取出來)

      

     2、針對接口編程,而不是針對實現編程。(FlyBehavior、QuackBehavior)

     ? ?3、多用組合,少用繼承。(有一個比是一個更好)

      

Talk is cheap,

Duck類:

public abstract class Duck {/** 行為接口* */FlyBehavior flyBehavior;QuackBehavior quackBehavior;public Duck(){}public abstract void dispaly();/** 設定鴨子的行為* */public void setFlyBehavior(FlyBehavior fb){flyBehavior = fb;}public void setQuackBehavior(QuackBehavior qb){quackBehavior = qb;}/** 委托給行為類* */public void performFly(){flyBehavior.fly();}public void performQuack(){quackBehavior.quack();}public void swim(){System.out.println("All dusks float,even decoys");}}

Fly接口、Quack接口:

/* * 飛行接口 * */ public interface FlyBehavior {public void fly(); }public interface QuackBehavior {public void quack(); }

實現:

/* * 不會飛的鴨子的行為 * */ public class FlyNoWay implements FlyBehavior{@Overridepublic void fly() {System.out.println("i cant fly!!");} }public class FlyRocketPowered implements FlyBehavior{@Overridepublic void fly() {System.out.println("i'm flying with a rocket!");} }/* *真會飛的鴨子的行為 * */ public class FlyWithWings implements FlyBehavior{@Overridepublic void fly() {System.out.println("i'm flying !!");} } public class MuteQuack implements QuackBehavior{@Overridepublic void quack() {System.out.println("<Since>");} }public class Quack implements QuackBehavior{@Overridepublic void quack() {System.out.println("Quack");} }public class Squeak implements QuackBehavior{@Overridepublic void quack() {System.out.println("Sqeak");} }

子類:

public class MallardDuck extends Duck{public MallardDuck(){quackBehavior = new Quack();flyBehavior = new FlyWithWings();}@Overridepublic void dispaly() {System.out.println("i'm a real Mallard duck!");} }public class ModelDuck extends Duck{public ModelDuck(){flyBehavior = new FlyNoWay();quackBehavior = new MuteQuack();}@Overridepublic void dispaly() {System.out.println("i'm a model duck!");}}

?

測試:

public class MiniDuckSimulator {public static void main(String[] args){Duck mallard = new MallardDuck();mallard.performFly();//調用MallardDuck繼承的performFly()方法,進而委托給該對象的FlyBehaviour處理 mallard.performQuack();Duck model1 = new ModelDuck();model1.performFly();model1.setFlyBehavior(new FlyRocketPowered());//動態的改變飛行行為 model1.performFly();} }

?

轉載于:https://www.cnblogs.com/tshua/p/5575786.html

總結

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

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