StrategyPattern--策略模式java实现
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
1.原理參考博客:https://www.cnblogs.com/java-my-life/archive/2012/05/10/2491891.html,這次我們以三國諸葛亮給的錦囊妙計(jì)為例
2.Strenge接口,所有的策略都是實(shí)現(xiàn)它的方法;
package cn.xiaobo.Strenge;
/**
?* 一個(gè)策略接口,內(nèi)部只需要定義一個(gè)方法就行;實(shí)現(xiàn)由具體的子類實(shí)現(xiàn);
?* @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.將三個(gè)策略放入錦囊,只要將對應(yīng)的策略取出即可
package cn.xiaobo.Strenge;
/**
?* 將三個(gè)策略放入錦囊,只要將對應(yīng)的策略取出即可
?* @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.執(zhí)行策略,趙云是策略的執(zhí)行者,只需要將一個(gè)個(gè)的策略執(zhí)行就可以
package cn.xiaobo.Strenge;
public class StrangeMain {
?? ?/**
?? ? * 趙云是策略的執(zhí)行者,只需要將一個(gè)個(gè)的策略執(zhí)行就可以;
?? ? * @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.優(yōu)點(diǎn)與缺點(diǎn)
? * 優(yōu)點(diǎn)
?? ? * 策略模式提供了管理相關(guān)的算法族的辦法。
?? ? * 策略類的等級結(jié)構(gòu)定義了一個(gè)算法或行為族。
?? ? * 恰當(dāng)使用繼承可以把公共的代碼移到父類里面,從而避免代碼重復(fù)
?? ? *
?? ? * 使用策略模式可以避免使用多重條件(if-else)語句。
?? ? * 多重條件語句不易維護(hù),它把采取哪一種算法或采取哪一種行為的邏輯與算法或行為的邏輯混合在一起,
?? ? * 統(tǒng)統(tǒng)列在一個(gè)多重條件語句里面,比使用繼承的辦法還要原始和落后。
?? ? *
?? ? * 缺點(diǎn)
?? ? * 由于策略模式把每個(gè)具體的策略實(shí)現(xiàn)都單獨(dú)封裝成為類,如果備選的策略很多的話,那么對象的數(shù)目就會很可觀
?? ? *
?? ? * 客戶端必須知道所有的策略類,并自行決定使用哪一個(gè)策略類。這就意味著客戶端必須理解這些算法的區(qū)別,以便適時(shí)選擇恰當(dāng)?shù)乃惴悺?br /> ?? ? * 換言之,策略模式只適用于客戶端知道算法或行為的情況
?
?
?
轉(zhuǎn)載于:https://my.oschina.net/u/3745828/blog/1592609
總結(jié)
以上是生活随笔為你收集整理的StrategyPattern--策略模式java实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 4.4. Config file
- 下一篇: ul li列表元素浮动导致border没