1.特点:将一系列算法逐个封装并可相互替换,易于切换、理解、扩展。
优点:
1)提供了管理相关算法族的方法。
2)可以避免使用多重条件转移语句。
缺点:
1)必须知道所有的具体策略类及它们的区别.
2)生成许多的策略类。
2.概念:
3.类图:
4.实现代码:
/// <summary>
/// 策略类,定义了所有支持的算法的公共接口
/// </summary>
public abstract class Stratege
{
/// <summary>
/// 策略类中支持的算法,当然还可以有更多,这里只定义了一个。
/// </summary>
public abstract void Algorithm();
}
/// <summary>
/// 具体策略 A,实现了一种具体算法
/// </summary>
public class ConcreteStrategeA : Stratege
{
/// <summary>
/// 具体算法
/// </summary>
public override void Algorithm()
{
// 策略A中实现的算法
}
}
/// <summary>
/// 具体策略 B,实现了一种具体算法
/// </summary>
public class ConcreteStrategeB : Stratege
{
/// <summary>
/// 具体算法
/// </summary>
public override void Algorithm()
{
// 策略B中实现的算法
}
}
/// <summary>
/// Context 上下文,维护一个对Stratege对象的引用
/// </summary>
public class Context
{
private Stratege m_Stratege;
/// <summary>
/// 初始化上下文时,将具体策略传入
/// </summary>
/// <param name="stratege"></param>
public Context(Stratege stratege)
{
m_Stratege = stratege;
}
/// <summary>
/// 根据具体策略对象,调用其算法
/// </summary>
public void ExecuteAlgorithm()
{
m_Stratege.Algorithm();
}
}