亚洲精品中文免费|亚洲日韩中文字幕制服|久久精品亚洲免费|一本之道久久免费

      
      

            <dl id="hur0q"><div id="hur0q"></div></dl>

                Java 設計模式之策略模式

                定義

                模式定義了一系列算法,并將每個算法封裝起來,使它們可以互相替換,且算法的變化不會影響使用算法的用戶。

                策略模式屬于對象行為模式,它通過對算法進行封裝,把使用算法的責任和算法的實現(xiàn)方式分割開來,并委派給不同的對象對這些算法進行管理。

                通俗理解:

                在現(xiàn)實生活中經(jīng)常遇到某種目標存在多種策略可供選擇的情況。

                例如:出行可以選擇乘坐火車、汽車、私家車、自行車等。

                優(yōu)點:

                1、多重條件語句不易維護,使用策略模式可以避免使用多重條件語句,如if…else 語句、switch…case語句。

                2、使用恰當?shù)睦^承,可以把公共代碼轉(zhuǎn)移到父類里面,避免重復代碼。

                3、策略模式可以提供相同的行為不同的實現(xiàn),客戶可以根據(jù)不同時間或空間要求選擇不同的。

                4、策略模式完美支持開閉原則,可以在不修改原代碼的情況下,靈活增加算法。

                5、策略模式實現(xiàn)了對算法的使用和實現(xiàn),二者分離。

                缺點:

                1、使用者必須了解所有算法的區(qū)別,以便選擇恰當?shù)乃惴悺?/p>

                2、會造成很多策略類,增加維護難度。

                策略模式結構:

                1、抽象策略類:定義一個公共接口,各種不同算法以不同的方式實現(xiàn)這個接口,環(huán)境角色使用這個接口調(diào)用不同算法,一般使用接口或者抽象類實現(xiàn)。

                2、具體策略類:實現(xiàn)了抽象策略定義的接口,提供具體的算法實現(xiàn)。

                3、環(huán)境類: 持有一個策略類的引用,最終給客戶端調(diào)用。

                代碼實現(xiàn)場景:

                劉備要到江東娶老婆了,走之前諸葛亮給趙云(伴郎)三個錦囊妙計,說是按天機拆開解決棘手問題。

                先說這個場景中的要素:三個妙計,一個錦囊,一個趙云,妙計是小亮同志給的,妙計是放置在錦囊里,俗稱就是錦囊妙計嘛,那趙云就是一個干活的人,從錦囊中取出妙計,執(zhí)行,然后獲勝。

                上代碼:

                /** * 首先定一個策略接口,這是諸葛亮老人家給趙云的三個錦囊妙計的接口 */public interface IStrategy { //每個錦囊妙計都是一個可執(zhí)行的算法 public void operate();}/** * 妙計有了,需要把妙計放到錦囊里面 */public class Context { // 構造函數(shù),你要使用那個妙計 private IStrategy iStrategy; public Context(IStrategy iStrategy) { this.iStrategy = iStrategy; } // 開始使用錦囊 public void operate() { this.iStrategy.operate(); }}public class BackDoor implements IStrategy { /** * 妙計一 : 找喬國老幫忙,使孫權不能殺劉備 */ @Override public void operate() { System.out.println(“找喬國老幫忙,讓吳國太給孫權施加壓力”); }}/** * 妙計二:求吳國太開個綠燈 */public class GivenGreenLight implements IStrategy { @Override public void operate() { System.out.println(“求吳國太開個綠燈,放行!”); }}/** * 妙計三:孫夫人斷后,擋住追兵 */public class BlockEnemy implements IStrategy { @Override public void operate() { System.out.println(“孫夫人斷后,擋住追兵”); }}public class ZhaoYun { /** * 趙云出場了,他根據(jù)諸葛亮給他的交代,依次拆開妙計 * @param args */ public static void main(String[] args) { Context context; System.out.println(“———–剛剛到吳國的時候拆第一個————-“); context = new Context(new BackDoor()); context.operate(); System.out.println(“”); System.out.println(“———–劉備樂不思蜀了,拆第二個了————-“); context = new Context(new GivenGreenLight()); context.operate(); System.out.println(“”); System.out.println(“———–孫權的小兵追了,咋辦?拆第三個 ————-“); context = new Context(new BlockEnemy()); context.operate(); System.out.println(“”); }}

                注:本文創(chuàng)作思路源于《設計模式之禪》

                鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場,版權歸原作者所有,如有侵權請聯(lián)系管理員(admin#wlmqw.com)刪除。
                用戶投稿
                上一篇 2022年7月16日 18:14
                下一篇 2022年7月16日 18:14

                相關推薦

                聯(lián)系我們

                聯(lián)系郵箱:admin#wlmqw.com
                工作時間:周一至周五,10:30-18:30,節(jié)假日休息