1,定義
策略模式,它定義了算法家族,分別封裝起來,讓他們之間可以互相替換,此模式讓算法的變化,不會影響到使用算法的客戶,
2,具體的代碼的實現(xiàn)以及UML圖
策略模式.png
//這是標記的符號 ````
using UnityEngine;
using System.Reflection;
using StrategyMode;
public class strategyMode : MonoBehaviour
{
void Start()
{
Context context = new Context("B");
context.GetResult();
}
}
// factory and strategy and reflection
namespace StrategyMode
{
public abstract class Strategy
{
public abstract void AlgrithmInterface();
}
public class ConcreteStrategyA : Strategy
{
public override void AlgrithmInterface()
{
Debug.Log("ConcreteStrategyA");
}
}
public class ConcreteStrategyB : Strategy
{
public override void AlgrithmInterface()
{
Debug.Log("ConcreteStrategyB");
}
}
public class ConcreteStrategyC : Strategy
{
public override void AlgrithmInterface()
{
Debug.Log("ConcreteStrategyC");
}
}
public class Context
{
private Strategy Strategy;
// strategy mode only
//public Context(Strategy strategy)
//{
// this.Strategy = strategy;
//}
// strategy mode and factory mode
// use reflection need
public Context(string name)
{
Strategy = (Strategy)(Assembly.Load("Assembly-CSharp").
CreateInstance("StrategyMode.ConcreteStrategy" + name));
}
public void GetResult()
{
Strategy.AlgrithmInterface();
}
}
}
3,關(guān)于策略模式的思考
策略模式是一種定義一系列算法的方法,從概念上看,所有的算法完成的都是相同的工作,只是實現(xiàn)不同,它可以以相同的方式調(diào)用所有的算法,減少了各種算法與使用算法類之間的耦合。
策略模式不僅可以用來封裝算法,也可以用來封裝任何類型的規(guī)則,適用于處理需要在不同的階段應(yīng)用不同的業(yè)務(wù)規(guī)則的情況。
4,關(guān)于策略模式和簡單工廠模式的區(qū)別的思考
簡單工廠模式更加強調(diào)的是對象的創(chuàng)建,利用創(chuàng)建的對象去執(zhí)行操作
策略模式更加強調(diào)的是通過不同的算法得到不同的結(jié)果,強調(diào)使用不同i的規(guī)則或者算法。通過context得到結(jié)果,而不是實際的對象。