您的位置:首页 > 其它

设计模式笔记(三)—— 策略模式

2008-10-24 17:54 169 查看
策略模式:定义的算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。策略模式是一种定义一种算法的方法,从概念上看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有算法,减少了各种算法类与使用算法类之间的耦合。
优点:第一,策略模式的Strategy类层次为Context定义了一系列的可供重用的算法或行为。继承有助于析取出这些算法中的公共功能;第二,简化了单元测试,因为每个算法都有自己的类,可以通过自己的接口单独测试。

using System;

using System.Collections.Generic;

/**概述:

* 策略模式:定义的算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。策略模式是一种定义一种算法的方法,从概念上看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有算法,减少了各种算法类与使用算法类之间的耦合。

优点:第一,策略模式的Strategy类层次为Context定义了一系列的可供重用的算法或行为。继承有助于析取出这些算法中的公共功能;第二,简化了单元测试,因为每个算法都有自己的类,可以通过自己的接口单独测试。

*/

namespace StuDesignMode.Strategy

{

//抽象算法类

abstract class AbsStrategy

{

//算法方法

public abstract void AlgoritlmInterface();

}

class ConcreteStrategyA : AbsStrategy

{

public override void AlgoritlmInterface()

{

Console.WriteLine("算法A实现");

}

}

class ConcreteStrategyB : AbsStrategy

{

public override void AlgoritlmInterface()

{

Console.WriteLine("算法B实现");

}

}

class ConcreteStrategyC : AbsStrategy

{

public override void AlgoritlmInterface()

{

Console.WriteLine("算法C实现");

}

}

//上下文

class Context

{

private AbsStrategy _strategy;

public Context(AbsStrategy strategy)

{

this._strategy = strategy;

}

public void ContextInterface()

{

this._strategy.AlgoritlmInterface();

}

}

//客户端测试

class ClientTest

{

static void Main(string[] args)

{

Context context = null;

context = new Context(new ConcreteStrategyA());

context.ContextInterface();

context = new Context(new ConcreteStrategyB());

context.ContextInterface();

context = new Context(new ConcreteStrategyC());

context.ContextInterface();

Console.WriteLine();

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: