码迷,mamicode.com
首页 > 其他好文 > 详细

策略模式

时间:2016-05-07 13:29:03      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:

策略模式包含三个角色:

  • 环境(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();
}

 

策略模式

标签:

原文地址:http://www.cnblogs.com/shanoon/p/5452209.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!