国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

策略模式(Strategy)

luodongseu / 3294人閱讀

摘要:一般實現(xiàn)創(chuàng)建執(zhí)行方法測試類問題在執(zhí)行方法中添加或修改方法時,需要修改執(zhí)行類的源代碼,及客戶端調(diào)用的方法。策略模式需要創(chuàng)建一個容器類,一個策略接口,多個策略類及一個測試類。缺點客戶端需要知道所有的策略類,從而決定具體調(diào)用會產(chǎn)生大量策略類。

一般實現(xiàn)

創(chuàng)建執(zhí)行方法

    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();
    }

問題
在執(zhí)行方法中添加或修改方法時,需要修改執(zhí)行類的源代碼,及客戶端調(diào)用的方法。

策略模式

需要創(chuàng)建
一個容器類(Context),一個策略接口(IStrategy),多個策略類(Strategy implement IStrategy)及一個測試類。

代碼實現(xiàn)

容器類:通過構(gòu)造方法注入IStrategy接口的實現(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();
    
    }
策略接口:實現(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 ...");
        }
    }

具體實現(xiàn)

在測試方法中實例化一個容器,通過構(gòu)造方法利用多態(tài)的性質(zhì)傳入具體的實現(xiàn)類,調(diào)用容器的執(zhí)行方法,即實現(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)點

動態(tài)改變對象的行為。

缺點
客戶端需要知道所有的策略類,從而決定具體調(diào)用;會產(chǎn)生大量策略類。

源碼

https://github.com/Seasons20/DisignPattern.git
   

END

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/69229.html

相關(guān)文章

  • 設(shè)計模式-策略模式

    摘要:在這個算法類中封裝了大量查找算法,該類代碼將較復(fù)雜,維護較為困難。換言之,策略模式只適用于客戶端知道算法或行為的情況。策略模式概覽圖參考菜鳥教程策略模式十種常用的設(shè)計模式大部分自己總結(jié),部分摘抄與模式之策略模式 策略模式 ? 我們都知道商場打折的時候,會根據(jù)會員的等級情況進行不同的折扣優(yōu)惠,如果是VIP會員,那么可能就是5折優(yōu)惠,如果是一般會員就是8折優(yōu)惠,如果是普通顧客就是9折...

    Freelander 評論0 收藏0
  • 如何避免if else

    摘要:在開發(fā)的過程中相信你也會寫很多的語句吧,此篇主要來講講如何在日常開發(fā)的過程中盡量少的使用語句。策略一單例模式這種單例模式在類一加載的時候就將單例對象創(chuàng)建完畢,總是這個對象存在內(nèi)存中,避免了通過線程同步來生成對象,線程安全的創(chuàng)建方式。 在開發(fā)的過程中相信你也會寫很多的if else語句吧,此篇主要來講講如何在日常開發(fā)的過程中盡量少的使用if else語句。 0x01 為什么要去if el...

    YancyYe 評論0 收藏0
  • Java重構(gòu)-策略模式、狀態(tài)模式、衛(wèi)語句

    摘要:前言當(dāng)代碼中出現(xiàn)多重語句或者語句時。代替多重分支這個情況的代替方式是可以為晴天時處理邏輯下雨時處理邏輯陰天時處理邏輯策略模式使用策略模式可以代替多重和語句,讓代碼維護變得更加簡單。狀態(tài)模式允許一個對象在其內(nèi)部狀態(tài)改變的時候改變其行為。 前言 當(dāng)代碼中出現(xiàn)多重if-else語句或者switch語句時。弊端之一:如果這樣的代碼出現(xiàn)在多處,那么一旦出現(xiàn)需求變更,就需要把所有地方的if-els...

    Sourcelink 評論0 收藏0
  • 慕課網(wǎng)_《模式的秘密之策略模式》學(xué)習(xí)總結(jié)

    時間: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... 第一章:策略模式簡介 1-1 簡介 課程大綱 什么是策略模式 策略模式如何實現(xiàn) 策略模式總結(jié)篇 實例案例分享 日常生活中的策略 Wor...

    zhongmeizhi 評論0 收藏0
  • 設(shè)計模式-策略模式

    摘要:今天我們來學(xué)習(xí)一種行為型模式,策略模式。策略模式讓算法獨立于使用它的客戶而變化,也稱為政策模式。策略模式提供了可以替換繼承關(guān)系的辦法。使用策略模式可以避免使用多重條件轉(zhuǎn)移語句。策略模式將造成產(chǎn)生很多策略類。今天我們來學(xué)習(xí)一種行為型模式,策略模式(Strategy Pattern)。模式定義定義一系列算法,將每一個算法封裝起來,并讓它們可以相互替換。策略模式讓算法獨立于使用它的客戶而變化,也稱...

    番茄西紅柿 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<