策略模式

前言

使用模板方法模式,可以進行共有方法的抽取,快速複用和擴展。策略模式也是一種行爲型模式,做用和模板方法模式同樣。你們對 if-else 嵌套過多的處理方法,最多見的手段就是利用策略模式。算法

目錄

1、定義

定義一組算法,將每一個算法都封裝起來,而且使它們之間能夠互換markdown

2、模式原理分析

//抽象的策略角色
public interface Strategy{
    //策略模式的運算規則
    public void doSomething();
}
//具體的策略角色
public class ConcreteStrategy1 implements Strategy{
    public void doSomething(){
        System.out.println("具體策略1的規則");
    }
}
public class ConcreteStrategy2 implements Strategy{
    public void doSomething(){
        System.out.println("具體策略2的規則");
    }
}
//封裝角色
public class Context{
    //抽象策略
    private Strategy strategy = null;
    //構造函數設置具體策略
    public Context(Strategy _strategy){
        this.strategy = _strategy;
    }
    public void doAnyThing(){
        this.strategy.doSomething();
    }
}
複製代碼

高層的模塊調用很簡單,須要知道使用哪一個策略,構建出它的對象函數

public class Client{
    public static void main(String[] args){
        //聲明一個具體策略
        Strategy strategy = new ConcreteStrategy1();
        Context context = new Context(strategy);
        //執行
        context.doAnyThing();
    }
}
複製代碼

3、使用場景

  • 只但願客戶端選擇已經封裝好的算法場景而不用關心算法實現細節this

  • 多個類只有在算法或行爲上稍有不一樣的場景spa

  • 算法須要自由切換的場景code

  • 須要屏蔽算法規則的場景orm

  • 分離使用策略和建立策略的場景對象

4、優勢

  • 算法能夠自由切換it

  • 避免使用多重條件判斷io

  • 擴展性好

5、缺點

  • 策略類數量增多,複用可能性小

  • 全部的策略類須要對外暴露

  • 修改代碼時,須要瞭解每一個策略類,對使用場景進行修改

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息