策略模式(Strategy)

通常實現git

  • 建立執行方法
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();
    }
  • 問題
    在執行方法中添加或修改方法時,須要修改執行類的源代碼,及客戶端調用的方法。

策略模式github

  • 須要建立
    一個容器類(Context),一個策略接口(IStrategy),多個策略類(Strategy implement IStrategy)及一個測試類。
  • 代碼實現

    容器類:經過構造方法注入IStrategy接口的實現類,而後調用接口的執行方法;ide

public class Context {
    
        private IStrategy strategy;
    
        public Context(IStrategy strategy){
            this.strategy = strategy;
        }
    
        public void operator (){
            strategy.operator();
        }
    }
策略接口:定義策略的執行方法;
public interface IStrategy {
    
        void operator();
    
    }
策略接口:實現策略接口,擁有具體的執行方法;
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 ...");
        }
    }
  • 具體實現

    在測試方法中實例化一個容器,經過構造方法利用多態的性質傳入具體的實現類,調用容器的執行方法,即實現具體策略類的執行方法。測試

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 ...
  • 優勢

    動態改變對象的行爲。this

  • 缺點
    客戶端須要知道全部的策略類,從而決定具體調用;會產生大量策略類。

源碼code

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

END對象

相關文章
相關標籤/搜索