策略模式
定义
策略模式,定义了一组算法,分别封装起来,使得它们之间可以相互替换。
此模式让算法的变化,不会影响到其他算法和调用者
实现
using System;
namespace StrategyModeMode
{
/// <summary>
/// 策略模式:它定义了一组算法,分别封装起来,让它们之间可以互相替换,
/// 此模式让算法的变化,不会影响到使用算法的客户
///
/// 应用场景:
/// 多个类只区别于在表现形式的不同,使用方式一致。
/// 算法彼此完全独立,可随意替换组合。
///
///
/// 例如 商场优惠,无论是 折扣 还是 满减,都是对金额不同的算法。优惠如何变化,不应该影响到结账。
/// </summary>
class Program
{
static void Main(string[] args)
{
Context context;
context = new Context(new ConcreteStrategyA());
context.ContextInterface();
context = new Context(new ConcreteStrategyB());
context.ContextInterface();
context = new Context(new ConcreteStrategyC());
context.ContextInterface();
}
}
/// <summary>
/// 抽象算法类
/// </summary>
abstract class Strategy
{
/// <summary>
/// 算法方法
/// </summary>
public abstract void AlgorithmInterface();
}
/// <summary>
/// 具体算法A
/// </summary>
class ConcreteStrategyA : Strategy
{
public override void AlgorithmInterface()
{
Console.WriteLine("算法A");
}
}
/// <summary>
/// 具体算法B
/// </summary>
class ConcreteStrategyB : Strategy
{
public override void AlgorithmInterface()
{
Console.WriteLine("算法B");
}
}
/// <summary>
/// 具体算法C
/// </summary>
class ConcreteStrategyC : Strategy
{
public override void AlgorithmInterface()
{
Console.WriteLine("算法C");
}
}
/// <summary>
/// 上下文 具体使用算法
/// </summary>
class Context
{
Strategy strategy;
public Context(Strategy strategy)
{
this.strategy = strategy;
}
public void ContextInterface()
{
strategy.AlgorithmInterface();
}
}
}