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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

StrategyPattern--策略模式java实现

發布時間:2025/3/20 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 StrategyPattern--策略模式java实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

1.原理參考博客:https://www.cnblogs.com/java-my-life/archive/2012/05/10/2491891.html,這次我們以三國諸葛亮給的錦囊妙計為例

2.Strenge接口,所有的策略都是實現它的方法;

package cn.xiaobo.Strenge;

/**
?* 一個策略接口,內部只需要定義一個方法就行;實現由具體的子類實現;
?* @author Administrator
?*
?*/

public interface Strenge {

?? ? void operate();
}

3.BackDoor 策略1找喬國老幫忙防止被周瑜殺害,

package cn.xiaobo.Strenge;

/**
?* 策略1找喬國老幫忙防止被周瑜殺害;
?* @author Administrator
?*
?*/
public class BackDoor implements Strenge{

?? ?@Override
?? ?public void operate() {
?? ??? ?System.out.println("找喬國老幫忙");
?? ??? ?
?? ?}
}

4.策略2找喬國老開綠燈,放行

package cn.xiaobo.Strenge;

/**
?* 策略2找喬國老開綠燈,放行;
?* @author Administrator
?*
?*/
public class GiveGreenLight implements Strenge{

?? ?@Override
?? ?public void operate() {
?? ??? ?System.out.println("找喬國老開綠燈");
?? ??? ?
?? ?}
}

5.策略3讓周瑜妹妹攔住追兵,逃出追殺

package cn.xiaobo.Strenge;

/**
?* 策略3讓周瑜妹妹攔住追兵,逃出追殺;
?* @author Administrator
?*
?*/
public class BlockEnemy implements Strenge{

?? ?@Override
?? ?public void operate() {
?? ??? ?System.out.println("讓周瑜妹妹擋住追兵");
?? ??? ?
?? ?}
}

6.將三個策略放入錦囊,只要將對應的策略取出即可

package cn.xiaobo.Strenge;

/**
?* 將三個策略放入錦囊,只要將對應的策略取出即可
?* @author Administrator
?*
?*/

public class StrangeApp {
?? ??? ?private Strenge iStrenge;
?? ??? ?
?? ??? ?public StrangeApp(Strenge strenge) {
?? ??? ??? ?// TODO Auto-generated constructor stub
?? ??? ??? ?this.iStrenge=strenge;
?? ??? ?}
?? ??? ?public void operate(){
?? ??? ??? ?this.iStrenge.operate();
?? ??? ?}

}

7.執行策略,趙云是策略的執行者,只需要將一個個的策略執行就可以

package cn.xiaobo.Strenge;

public class StrangeMain {

?? ?/**
?? ? * 趙云是策略的執行者,只需要將一個個的策略執行就可以;
?? ? * @param args
?? ? *
??
?? ? */
?? ?public static void main(String[] args) {
?? ??? ?//第一條策略
?? ??? ?BackDoor backDoor=new BackDoor();
?? ??? ?//第二條策略
?? ??? ?GiveGreenLight giveGreenLight=new GiveGreenLight();
?? ??? ?//第三條策略
?? ??? ?BlockEnemy blockEnemy=new BlockEnemy();
?? ??? ?
?? ??? ?System.out.println("剛到吳國");
?? ??? ?StrangeApp strange1=new StrangeApp(backDoor);
?? ??? ?strange1.operate();
?? ??? ?System.out.println("\n");
?? ??? ?
?? ??? ?System.out.println("樂不思蜀");
?? ??? ?StrangeApp strange2=new StrangeApp(giveGreenLight);
?? ??? ?strange2.operate();
?? ??? ?System.out.println("\n");
?? ??? ?
?? ??? ?System.out.println("媳婦斷后");
?? ??? ?StrangeApp strange3=new StrangeApp(blockEnemy);
?? ??? ?strange3.operate();
?? ??? ?System.out.println("\n");
?? ?}

}

8.優點與缺點

? * 優點
?? ? * 策略模式提供了管理相關的算法族的辦法。
?? ? * 策略類的等級結構定義了一個算法或行為族。
?? ? * 恰當使用繼承可以把公共的代碼移到父類里面,從而避免代碼重復
?? ? *
?? ? * 使用策略模式可以避免使用多重條件(if-else)語句。
?? ? * 多重條件語句不易維護,它把采取哪一種算法或采取哪一種行為的邏輯與算法或行為的邏輯混合在一起,
?? ? * 統統列在一個多重條件語句里面,比使用繼承的辦法還要原始和落后。
?? ? *
?? ? * 缺點
?? ? * 由于策略模式把每個具體的策略實現都單獨封裝成為類,如果備選的策略很多的話,那么對象的數目就會很可觀
?? ? *
?? ? * 客戶端必須知道所有的策略類,并自行決定使用哪一個策略類。這就意味著客戶端必須理解這些算法的區別,以便適時選擇恰當的算法類。
?? ? * 換言之,策略模式只適用于客戶端知道算法或行為的情況

?

?

?

轉載于:https://my.oschina.net/u/3745828/blog/1592609

總結

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

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