JAVA 設計模式 策略模式


目錄

 

用途


Title
定義了算法家族分別封裝起來,讓它們之間 可以互相替換,此模式讓算法的變化,不會影響到使用算法的客戶。

 

策略模式是一種 行為型模式

 

 

結構

圖-策略模式結構圖

Strategy : 定義所有算法的公共接口(AlgorithmInterface)。Context 使用這個接口去調用 ConcreteStrategy 定義的具體算法。
abstract class Strategy {
    public abstract void AlgorithmInterface();
}

ConcreteStrategy : 實現 Strategy 中的算法接口(AlgorithmInterface)。

復制代碼
class ConcreteStrategyA extends Strategy {
    @Override
    public void AlgorithmInterface() {
        System.out.println("算法A");
    }
}

class ConcreteStrategyB extends Strategy {
    @Override
    public void AlgorithmInterface() {
        System.out.println("算法B");
    }
}

class ConcreteStrategyC extends Strategy {
    @Override
    public void AlgorithmInterface() {
        System.out.println("算法C");
    }
}
復制代碼

Context : 用一個 ConcreteStrategy 來配置。維護一個對 Strategy 對象的引用。

復制代碼
class Context {
    Strategy strategy;
    public Context(Strategy strategy) {
        this.strategy = strategy;
    }
    
    public void ContextInterface() {
        strategy.AlgorithmInterface();
    }
}
復制代碼

測試代碼

復制代碼
public class StrategyPattern {
    public static void main(String[] args) {
        Context context1 = new Context(new ConcreteStrategyA());
        context1.ContextInterface();
        
        Context context2 = new Context(new ConcreteStrategyB());
        context2.ContextInterface();
        
        Context context3 = new Context(new ConcreteStrategyC());
        context3.ContextInterface();
    }
}
復制代碼

運行結果

算法A
算法B
算法C

 

 

 

推薦

本文屬於 JAVA設計模式系列 。

 

 

參考資料

《大話設計模式》

《HeadFirst設計模式》 


免責聲明!

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



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