设计模式之行为型模式---策略模式
来源:互联网 发布:mac版枪火兄弟连2 编辑:程序博客网 时间:2024/06/08 06:07
一、策略模式的特点
在策略模式中我们定义一个基类Strategy作为公共的接口类,然后在下方不同的类通过继承实现同一个接口,实现不同的功能,这样做到在客户端可以调用统一个接口,根据不同的需求实现不同的功能。而Contex作为一个调配类根据客户指定的功能,调用实现这个功能的接口。
策略模式作用就是将实现功能的算法进行单独的封装,使用时可以相互替代其他的算法。
策略模式的优点:
1、可以在自己定义的算法之间自由的切换出来问题
2、易于扩展出来其他问题的算法
3、容易对每个算法进行修改由不会影响其他的算法对象。
二、策略模式的实现
1、策略模式的实现模型
2、策略模式的代码实现
abstract class Strategy{ public abstract void AlgorithmInterface();}class ConcretesStrategyA : Strategy{ public override void AlgorithmInterface() { Console.WriteLine("实现了算法A"); }}class ConcretesStrategyB : Strategy{ public override void AlgorithmInterface() { Console.WriteLine("实现了算法B"); }}class ConcretesStrategyC : Strategy{ public override void AlgorithmInterface() { Console.WriteLine("实现了算法C"); }}class Context{ Strategy strategy; public Context(Strategy strategy) { this.strategy = strategy; } public void ContextInterface() { strategy.AlgorithmInterface(); }}class wMain{ static void Main() { Context context; context = new Context(new ConcretesStrategyA()); context.ContextInterface(); context = new Context(new ConcretesStrategyB()); context.ContextInterface(); context = new Context(new ConcretesStrategyC()); context.ContextInterface(); Console.Read(); }}
运行结果:
三、策略模式与工厂模式的结合
使用策略模式的时候还是需要由客户端指定创建那个对象,然后传递给策略模式,这样本身没有解决客户的判断压力,我们可以通过与工厂模式的结合来减轻客户的判断压力。客户端只需要知道需要实现那种功能,只需要将这种功能通知给策略适配器,而不必判断使用那个对象。
代码实现
using System; abstract class Strategy{ public abstract void AlgorithmInterface();}class ConcretesStrategyA : Strategy{ public override void AlgorithmInterface() { Console.WriteLine("实现了算法A"); }}class ConcretesStrategyB : Strategy{ public override void AlgorithmInterface() { Console.WriteLine("实现了算法B"); }}class ConcretesStrategyC : Strategy{ public override void AlgorithmInterface() { Console.WriteLine("实现了算法C"); }}//改良的Contexclass ContextTool{ public Strategy strategy = null; public ContextTool(string type) { switch (type) { case "A": strategy = new ConcretesStrategyA(); break; case "B": strategy = new ConcretesStrategyB(); break; case "C": strategy = new ConcretesStrategyC(); break; default:break; } } public void ContextInterface() { strategy.AlgorithmInterface(); }}class wMain{ static void Main() { ContextTool tools; tools = new ContextTool("A"); tools.ContextInterface(); tools = new ContextTool("B"); tools.ContextInterface(); tools = new ContextTool("C"); tools.ContextInterface(); Console.Read(); }}
运行结果 :
0 0
- 设计模式-行为型之策略模式
- 设计模式 行为模式之策略模式
- java设计模式之行为型模式-策略模式
- 设计模式之行为型模式---策略模式
- Java设计模式之行为型模式(策略模式)
- 设计模式 - 行为型模式 - 策略模式
- 设计模式->行为型模式->策略模式
- 【设计模式】行为模式之Strategy策略
- java设计模式(行为型)之策略模式
- 设计模式(行为型)之策略模式(Strategy Pattern)
- 行为型:设计模式之策略模式(十六)
- Java设计模式(行为型)之-策略模式
- 详解java设计模式(三)之策略模式(行为型)
- 设计模式--行为型--策略模式
- 设计模式14:策略模式【行为型】
- [设计模式-行为型]策略模式(Strategy)
- 行为型设计模式-策略模式
- java-行为型模式-策略设计模式
- RuntimeException:~ InflateException
- hadoop下的Map-Reduce最高温度例子
- 下拉框选择
- Java线程
- mysql日期时间处理
- 设计模式之行为型模式---策略模式
- fseek函数解释
- Cloudera Manager5配置管理之配置Namenode 的HA
- 那些被面试过的iOS题目
- 无人机技术漫谈
- ReactNative 广告轮播页的实现
- iOS 路径
- sql中用于子查询的几个关键词 any(some是 any的别名),all,in,exists
- MySQL第二天早上第一次连接超时报错,解决方法