摘要:一般實現創建執行方法測試類問題在執行方法中添加或修改方法時,需要修改執行類的源代碼,及客戶端調用的方法。策略模式需要創建一個容器類,一個策略接口,多個策略類及一個測試類。缺點客戶端需要知道所有的策略類,從而決定具體調用會產生大量策略類。
一般實現
創建執行方法
public static void main(String[] args) { ExcuMenthod em = new ExcuMenthod(); em.method1(); em.method2(); em.method3(); }
測試類
public static void main(String[] args) { ExcuMenthod em = new ExcuMenthod(); em.method1(); em.method2(); em.method3(); }
問題
在執行方法中添加或修改方法時,需要修改執行類的源代碼,及客戶端調用的方法。
策略模式
需要創建
一個容器類(Context),一個策略接口(IStrategy),多個策略類(Strategy implement IStrategy)及一個測試類。
代碼實現
容器類:通過構造方法注入IStrategy接口的實現類,然后調用接口的執行方法;
public class Context { private IStrategy strategy; public Context(IStrategy strategy){ this.strategy = strategy; } public void operator (){ strategy.operator(); } }
策略接口:定義策略的執行方法;
public interface IStrategy { void operator(); }
策略接口:實現策略接口,擁有具體的執行方法;
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 ..."); } }
具體實現
在測試方法中實例化一個容器,通過構造方法利用多態的性質傳入具體的實現類,調用容器的執行方法,即實現具體策略類的執行方法。
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 ...
優點
動態改變對象的行為。
缺點
客戶端需要知道所有的策略類,從而決定具體調用;會產生大量策略類。
源碼
https://github.com/Seasons20/DisignPattern.git
END
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/69229.html
摘要:在這個算法類中封裝了大量查找算法,該類代碼將較復雜,維護較為困難。換言之,策略模式只適用于客戶端知道算法或行為的情況。策略模式概覽圖參考菜鳥教程策略模式十種常用的設計模式大部分自己總結,部分摘抄與模式之策略模式 策略模式 ? 我們都知道商場打折的時候,會根據會員的等級情況進行不同的折扣優惠,如果是VIP會員,那么可能就是5折優惠,如果是一般會員就是8折優惠,如果是普通顧客就是9折...
摘要:在開發的過程中相信你也會寫很多的語句吧,此篇主要來講講如何在日常開發的過程中盡量少的使用語句。策略一單例模式這種單例模式在類一加載的時候就將單例對象創建完畢,總是這個對象存在內存中,避免了通過線程同步來生成對象,線程安全的創建方式。 在開發的過程中相信你也會寫很多的if else語句吧,此篇主要來講講如何在日常開發的過程中盡量少的使用if else語句。 0x01 為什么要去if el...
摘要:前言當代碼中出現多重語句或者語句時。代替多重分支這個情況的代替方式是可以為晴天時處理邏輯下雨時處理邏輯陰天時處理邏輯策略模式使用策略模式可以代替多重和語句,讓代碼維護變得更加簡單。狀態模式允許一個對象在其內部狀態改變的時候改變其行為。 前言 當代碼中出現多重if-else語句或者switch語句時。弊端之一:如果這樣的代碼出現在多處,那么一旦出現需求變更,就需要把所有地方的if-els...
時間:2017年08月31日星期四說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學源碼:https://github.com/zccodere/s...學習源碼:https://github.com/zccodere/s... 第一章:策略模式簡介 1-1 簡介 課程大綱 什么是策略模式 策略模式如何實現 策略模式總結篇 實例案例分享 日常生活中的策略 Wor...
閱讀 1160·2021-10-15 09:39
閱讀 3064·2021-09-10 10:50
閱讀 3460·2019-08-30 15:53
閱讀 1886·2019-08-30 15:52
閱讀 2573·2019-08-29 15:31
閱讀 1983·2019-08-26 13:43
閱讀 2602·2019-08-26 13:37
閱讀 1448·2019-08-23 18:31