摘要:一般實(shí)現(xiàn)創(chuàng)建執(zhí)行方法測(cè)試類問題在執(zhí)行方法中添加或修改方法時(shí),需要修改執(zhí)行類的源代碼,及客戶端調(diào)用的方法。策略模式需要?jiǎng)?chuàng)建一個(gè)容器類,一個(gè)策略接口,多個(gè)策略類及一個(gè)測(cè)試類。缺點(diǎn)客戶端需要知道所有的策略類,從而決定具體調(diào)用會(huì)產(chǎn)生大量策略類。
一般實(shí)現(xiàn)
創(chuàng)建執(zhí)行方法
public static void main(String[] args) { ExcuMenthod em = new ExcuMenthod(); em.method1(); em.method2(); em.method3(); }
測(cè)試類
public static void main(String[] args) { ExcuMenthod em = new ExcuMenthod(); em.method1(); em.method2(); em.method3(); }
問題
在執(zhí)行方法中添加或修改方法時(shí),需要修改執(zhí)行類的源代碼,及客戶端調(diào)用的方法。
策略模式
需要?jiǎng)?chuàng)建
一個(gè)容器類(Context),一個(gè)策略接口(IStrategy),多個(gè)策略類(Strategy implement IStrategy)及一個(gè)測(cè)試類。
代碼實(shí)現(xiàn)
容器類:通過構(gòu)造方法注入IStrategy接口的實(shí)現(xiàn)類,然后調(diào)用接口的執(zhí)行方法;
public class Context { private IStrategy strategy; public Context(IStrategy strategy){ this.strategy = strategy; } public void operator (){ strategy.operator(); } }
策略接口:定義策略的執(zhí)行方法;
public interface IStrategy { void operator(); }
策略接口:實(shí)現(xiàn)策略接口,擁有具體的執(zhí)行方法;
public class Strategy1 implements IStrategy{ @Override public void operator() { System.out.println("FIRST OPERATOR ..."); } }
public class Strategy2 implements IStrategy{ @Override public void operator() { System.out.println("SECOND OPERATOR ..."); } }
public class Strategy3 implements IStrategy{ @Override public void operator() { System.out.println("THIRD OPERATOR ..."); } }
具體實(shí)現(xiàn)
在測(cè)試方法中實(shí)例化一個(gè)容器,通過構(gòu)造方法利用多態(tài)的性質(zhì)傳入具體的實(shí)現(xiàn)類,調(diào)用容器的執(zhí)行方法,即實(shí)現(xiàn)具體策略類的執(zhí)行方法。
public static void main(String[] args) { Context context = new Context(new Strategy1()); context.operator(); context = new Context(new Strategy2()); context.operator(); context = new Context(new Strategy3()); context.operator(); }
輸出:
FIRST OPERATOR ... SECOND OPERATOR ... THIRD OPERATOR ...
優(yōu)點(diǎn)
動(dòng)態(tài)改變對(duì)象的行為。
缺點(diǎn)
客戶端需要知道所有的策略類,從而決定具體調(diào)用;會(huì)產(chǎn)生大量策略類。
源碼
https://github.com/Seasons20/DisignPattern.git
END
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/69229.html
摘要:在這個(gè)算法類中封裝了大量查找算法,該類代碼將較復(fù)雜,維護(hù)較為困難。換言之,策略模式只適用于客戶端知道算法或行為的情況。策略模式概覽圖參考菜鳥教程策略模式十種常用的設(shè)計(jì)模式大部分自己總結(jié),部分摘抄與模式之策略模式 策略模式 ? 我們都知道商場(chǎng)打折的時(shí)候,會(huì)根據(jù)會(huì)員的等級(jí)情況進(jìn)行不同的折扣優(yōu)惠,如果是VIP會(huì)員,那么可能就是5折優(yōu)惠,如果是一般會(huì)員就是8折優(yōu)惠,如果是普通顧客就是9折...
摘要:在開發(fā)的過程中相信你也會(huì)寫很多的語(yǔ)句吧,此篇主要來講講如何在日常開發(fā)的過程中盡量少的使用語(yǔ)句。策略一單例模式這種單例模式在類一加載的時(shí)候就將單例對(duì)象創(chuàng)建完畢,總是這個(gè)對(duì)象存在內(nèi)存中,避免了通過線程同步來生成對(duì)象,線程安全的創(chuàng)建方式。 在開發(fā)的過程中相信你也會(huì)寫很多的if else語(yǔ)句吧,此篇主要來講講如何在日常開發(fā)的過程中盡量少的使用if else語(yǔ)句。 0x01 為什么要去if el...
摘要:前言當(dāng)代碼中出現(xiàn)多重語(yǔ)句或者語(yǔ)句時(shí)。代替多重分支這個(gè)情況的代替方式是可以為晴天時(shí)處理邏輯下雨時(shí)處理邏輯陰天時(shí)處理邏輯策略模式使用策略模式可以代替多重和語(yǔ)句,讓代碼維護(hù)變得更加簡(jiǎn)單。狀態(tài)模式允許一個(gè)對(duì)象在其內(nèi)部狀態(tài)改變的時(shí)候改變其行為。 前言 當(dāng)代碼中出現(xiàn)多重if-else語(yǔ)句或者switch語(yǔ)句時(shí)。弊端之一:如果這樣的代碼出現(xiàn)在多處,那么一旦出現(xiàn)需求變更,就需要把所有地方的if-els...
時(shí)間:2017年08月31日星期四說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)源碼:https://github.com/zccodere/s...學(xué)習(xí)源碼:https://github.com/zccodere/s... 第一章:策略模式簡(jiǎn)介 1-1 簡(jiǎn)介 課程大綱 什么是策略模式 策略模式如何實(shí)現(xiàn) 策略模式總結(jié)篇 實(shí)例案例分享 日常生活中的策略 Wor...
摘要:今天我們來學(xué)習(xí)一種行為型模式,策略模式。策略模式讓算法獨(dú)立于使用它的客戶而變化,也稱為政策模式。策略模式提供了可以替換繼承關(guān)系的辦法。使用策略模式可以避免使用多重條件轉(zhuǎn)移語(yǔ)句。策略模式將造成產(chǎn)生很多策略類。今天我們來學(xué)習(xí)一種行為型模式,策略模式(Strategy Pattern)。模式定義定義一系列算法,將每一個(gè)算法封裝起來,并讓它們可以相互替換。策略模式讓算法獨(dú)立于使用它的客戶而變化,也稱...
閱讀 1269·2021-10-15 09:39
閱讀 3171·2021-09-10 10:50
閱讀 3532·2019-08-30 15:53
閱讀 1963·2019-08-30 15:52
閱讀 2630·2019-08-29 15:31
閱讀 2041·2019-08-26 13:43
閱讀 2660·2019-08-26 13:37
閱讀 1509·2019-08-23 18:31