秒懂策略模式--簡單明了的例子


1.

策略模式將行為和環境隔離開來,環境角色類負責維持和查詢行為的類,各種類似的邏輯算法都在各個具體的策略類中進行實現,由於環境和行為隔離開來,所以行為的邏輯變更不會影響到環境和客戶端。

2.uml類圖:

這個模式涉及到三個角色:

環境(Context)角色:持有一個Strategy的引用。

抽象策略(Strategy)角色:這是一個抽象角色,通常由一個接口或抽象類實現。此角色給出所有的具體策略類所需的接口。

具體策略(ConcreteStrategy)角色:包裝了相關的算法或行為。

 

3.代碼結構截圖:(代碼不多,耐心看完)

4.代碼如下:

 abstract修飾方法就是要求其子類覆蓋(實現)這個方法。調用時可以以多態方式調用子類覆蓋(實現)后的方法,也就是說抽象方法必須在其子類中實現,除非子類本身也是抽象類。 需要注意:父類是抽象類,其中有抽象方法,那么子類繼承父類,並把父類中的所有抽象方法都實現(覆蓋)了,子類才有創建對象的實例的能力,否則子類也必須是抽象類。 凡是抽象類,就一定會是某個類的父類!否則,這個抽象類的存在沒有意義,因為抽象類不能被實例化。 既然抽象類一定是某一個類的父類,所以,這個抽象類一定要有構造函數!這樣,抽象類的子類才能成功實例化。 抽象類也有構造函數,只是,這個構造函數是給子類提供的。所以如果抽象類繼承其他類,那么抽象類的構造函數也會使用super語句,所以被繼承類也必須有對外提供的構造函數 
public abstract class Strategy {
    //定義抽象策略的方法
    public abstract int strategy(int a, int b);//假如這是一種支付業務,支付策略有4種
}
 
         

public class StrategyOne extends Strategy { public int strategy(int a, int b) { //無卡支付方式 return a + b*2;//此處寫相關業務代碼 } } public class StrategySecond extends Strategy { //會員支付方式 public int strategy(int a, int b) { return a+b;//此處寫相關業務代碼 } } public class StrategyThird extends Strategy { //applePay支付 public int strategy(int a,int b) { return a+b*3;//此處寫相關業務代碼 } } public class StrategyFourth extends Strategy { public int strategy(int a,int b) {//某某支付方式 return a+b*4;//此處寫相關業務代碼 } }
public class Context {
    //持有抽象策略角色的引用,用於客戶端調用
    private Strategy strategy;//獲得策略類

    public Strategy getStrategy() {
        return strategy;
    }

    //設置所需策略
    public void setStrategy(Strategy strategy) {
        this.strategy = strategy;

    }

    //根據設置的策略類返回對應的結果
    public int getResult(int a, int b) {
        return strategy.strategy(a, b);
    }


}
public class Client {
    public static void main(String[] args) {

        Context context = new Context();

        int result;

        context.setStrategy(new StrategySecond());

        result = context.getResult(1, 2);

        System.out.println("Second: "+result);

        context.setStrategy(new StrategyOne());

        result =context.getResult(1, 2);

        System.out.println("One: "+result);

        context.setStrategy(new StrategyThird());

        result = context.getResult(1, 2);

        System.out.println("Third: "+result);

        context.setStrategy(new StrategyFourth());

        result = context.getResult(1, 2);

        System.out.println("Fourth: "+result);
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM