**定義:**策略模式(Strategy Pattern),定義一系列算法,把它們一個個封裝起來,并且使它們可以相互替換。本模式使得算法可以獨立于使用它的客戶而變化。
類型:對象行為型模式。
概述:
??????策略模式是比較典型的對象行為型模式,它是將對處理對象的一系列不同算法都單獨抽離出來,單獨封裝成一個個類。策略的出現,主要是為了解決不同算法替換時的邏輯判斷,將邏輯判斷移到Client中去。策略模式比較常見,但是也相對比較簡單。
??????一系列算法,作為程序員,很容易就想到排序算法。那這里就以排序算法來舉例了。有文本內容Context,如果錄得的是亂序數據,那么排序最好選擇快速排序(Quick Sort);如果是多部分都有序,只有個別數據隨意插入其中,那么此時可以使用選擇排序(Select Sort)。
類圖:

參與者:
1. Context,上下文,維護一個指向SortAlgo的指針,用來訪問相應的排序算法。
1. SortAlgo,算法策略接口類,只是提供接口。
1. QuickSort、SelectSort,按照接口實現具體的算法。
示例代碼:
~~~
using System;
using System.Collections.Generic;
using System.Text;
namespace Pattern22
{
// 抽象算法類
abstract class SortAlgo
{
//算法方法
public abstract void Sort();
}
// 快速排序算法
class QuickSort : SortAlgo
{
// 具體實現快速排序算法
public override void Sort()
{
Console.WriteLine("快速排序算法實現");
}
}
// 選擇排序算法
class SelectSort : SortAlgo
{
// 具體實現選擇排序算法
public override void Sort()
{
Console.WriteLine("選擇排序算法實現");
}
}
//上下文
class Context
{
SortAlgo algo;
public Context(SortAlgo _algo)
{
this.algo = _algo;
}
//上下文接口
public void SortData()
{
algo.Sort();
}
}
class Program
{
static void Main(string[] args)
{
Context context;
// 當錄入的是隨機數據時,選擇使用快速排序算法
context = new Context(new QuickSort());
context.SortData();
// 當錄入一些比較有順序的數據時,使用選擇排序算法
context = new Context(new SelectSort());
context.SortData();
Console.Read();
}
}
}
~~~
適用性:
1. 多個類只區別在表現行為不同,可以使用Strategy模式,在運行時動態選擇具體要執行的行為。
1. 在需要新添加其他算法來實現時。
1. 對客戶端隱藏具體算法的實現細節。
優缺點:
1. 優點,將判斷的邏輯移到類外面,方便通過添加新類來完成新的算法。
1. 缺點,如果算法類過多,會對Client端調用不同算法的判斷帶來麻煩。
參考資料:
1. 《設計模式——可復用面向對象軟件基礎》
1. 《大話設計模式》
- 前言
- 設計模式六大原則
- 1——創建型模式之簡單工廠模式
- 2——創建型模式之工廠方法模式
- 3——創建型模式之抽象工廠模式
- 4——創建型模式之單例模式
- 5——創建型模式之建造者模式
- 6——創建型模式之原型模式
- 7——結構型模式之適配器模式
- 8——結構型模式之橋接模式
- 9——結構型模式之組合模式
- 10——結構型模式之裝飾者模式
- 11——結構型模式之外觀模式
- 12——結構型模式之享元模式
- 13——結構型模式之代理模式
- 14——行為型模式之職責鏈模式
- 15——行為型模式之命令模式
- 16——行為型模式之解釋器模式
- 17——行為型模式之迭代器模式
- 18——行為型模式之中介者模式
- 19——行為型模式之備忘錄模式
- 20——行為型模式之觀察者模式
- 21——行為型模式之狀態模式
- 22——行為型模式之策略模式
- 23——行為型模式之模板方法模型
- 24——行為型模式之訪問者模式
- 設計模式總結