策略模式

策略模式包含三个角色:

  • 环境(Context)角色:持有一个Strategy类的引用。
  • 抽象策略(Strategy)角色:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。
  • 具体策略(ConcreteStrategy)角色:包装了相关的算法或行为。

Strategy类(抽象策略)

abstract class Strategy
{
    //算法方法
    public abstract void AlgorithmInterface();
}

ConcreteStrategy类(具体策略)

//具体算法A
class ConcreteStrategyA:Strategy
{
    //算法A实现方法
    public override void AlgorithmInterface();
    {
        Console.WriteLine("算法A实现");
    }
}

//具体算法B
class ConcreteStrategyB:Strategy
{
    //算法B实现方法
    public override void AlgorithmInterface();
    {
        Console.WriteLine("算法B实现");
    }
}

//具体算法C
class ConcreteStrategyC:Strategy
{
    //算法C实现方法
    public override void AlgorithmInterface();
    {
        Console.WriteLine("算法C实现");
    }
}

Context类(环境)

//上下文
class Context
{
    Strategy strategy;
    public Context(Strategy stratety)   //初始化时,传入具体的策略对象
    {
        this.strategy=strategy;
    }
    //上下文接口
    public void ContextInteface()  //根据具体的策略对象,调用其算法的方法
    {
        strategy.AlgorithmInterface();
    }
}

客户端代码

static void Main(string[] args)
{
    Context context;
    //由于实例化不同的策略,所以最终在调用context.ContextInterface()时,所获得的结果不尽相同
    context=new Context(new ConcreteStrategyA());
    context.ContextInterface();

    context=new Context(new ConcreteStrategyB());
    context.ContextInterface();

    context=new Context(new ConcreteStrategyC());
    context.ContextInterface();

    Console.Read();
}

 

posted @ 2016-05-07 12:08  Leo的日记本  阅读(132)  评论(0编辑  收藏  举报