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

1.算法

策略模式將行爲和環境隔離開來,環境角色類負責維持和查詢行爲的類,各類相似的邏輯算法都在各個具體的策略類中進行實現,因爲環境和行爲隔離開來,因此行爲的邏輯變動不會影響到環境和客戶端。app

2.uml類圖:函數

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

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

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

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

 

3.代碼結構截圖:(代碼很少,耐心看完)blog

4.代碼以下:繼承

 abstract修飾方法就是要求其子類覆蓋(實現)這個方法。調用時能夠以多態方式調用子類覆蓋(實現)後的方法,也就是說抽象方法必須在其子類中實現,除非子類自己也是抽象類。 須要注意:父類是抽象類,其中有抽象方法,那麼子類繼承父類,並把父類中的全部抽象方法都實現(覆蓋)了,子類纔有建立對象的實例的能力,不然子類也必須是抽象類。 凡是抽象類,就必定會是某個類的父類!不然,這個抽象類的存在沒有意義,由於抽象類不能被實例化。 既然抽象類必定是某一個類的父類,因此,這個抽象類必定要有構造函數!這樣,抽象類的子類才能成功實例化。 抽象類也有構造函數,只是,這個構造函數是給子類提供的。因此若是抽象類繼承其餘類,那麼抽象類的構造函數也會使用super語句,因此被繼承類也必須有對外提供的構造函數 
public abstract class Strategy {
    //定義抽象策略的方法
    public abstract int strategy(int a, int 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(4, 3);

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

        context.setStrategy(new StrategyThird());

        result = context.getResult(5, 5);

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

        context.setStrategy(new StrategyFourth());

        result = context.getResult(6, 6);

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

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;//此處寫相關業務代碼 } }
相關文章
相關標籤/搜索