开发应用 - 策略模式(Strategy Pattern) 常用设计模式


  开发应用 - 策略模式(Strategy Pattern) 常用设计模式
开发应用 - 策略模式(Strategy Pattern) 常用设计模式


策略模式(Strategy Pattern) 


策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。

策略模式让算法独立于使用它的客户而独立变化。


贴图图片




/// <summary>
/// 更新数据的策略接口
/// </summary>
public interface IStrategyUpdate
{
   bool Update(DataTable myData);
}

// 来源:www.CSFramework.com, C/S结构框架学习网




/// <summary>
/// 把数据上传到火星上
/// </summary>
public class StrategySaveToMars : IStrategyUpdate
{
   ListBox _log;
   public StrategySaveToMars(ListBox log) { _log = log; }
   
   public bool Update(DataTable myData)
   {
      //remoteController.SendCommand("START_RCV_DEVICE");
      
      _log.Items.Add("已启动火星上的接收装置,正在上传数据...");
      
      //处理myData数据....
      return true;
   }
}

// 来源:www.CSFramework.com, C/S结构框架学习网




/// <summary>
/// 将数据保存到SQL服务器
/// </summary>
public class StrategySaveToSqlServer : IStrategyUpdate
{
   ListBox _log;
   public StrategySaveToSqlServer(ListBox log) { _log = log; }
   
   public bool Update(DataTable myData)
   {
      //保存到SQL服务器所进行的处理.....
      _log.Items.Add("正在将数据保存到SQL服务器..");
      //处理myData数据....
      return true;
   }
}


// 来源:www.CSFramework.com, C/S结构框架学习网





/// <summary>
///在无法连接SQL服务器的情况下进行本地缓存.
///进数据转换为XML文件保存在指定的目录下.
/// </summary>
public class StrategySaveToLocal : IStrategyUpdate
{
   ListBox _log;
   public StrategySaveToLocal(ListBox log) { _log = log; }
   
   public bool Update(DataTable myData)
   {
      //进行本地缓存处理.....
      _log.Items.Add("正在进行本地缓存..");
      //处理myData数据....
      return true;
   }
}


// 来源:www.CSFramework.com, C/S结构框架学习网



/// <summary>
/// 应用场景(客户类)
/// </summary>
public class StrategyContext
{
   public static void ExecuteStrategy(IStrategyUpdate strategy, ListBox log)
   {
      log.Items.Add("系统分析网络连线质量后选择:" strategy.ToString() "策略!");
      
      strategy.Update(new DataTable());
   }
}

// 来源:www.CSFramework.com, C/S结构框架学习网



/// <summary>
/// 策略工厂
/// </summary>
public class StrategyFactory
{
   /// <summary>
   /// 用户选择策略
   /// </summary>
   public static IStrategyUpdate Create(int n, ListBox log)
   {
      log.Items.Add("信号值为:" n.ToString());
      
      IStrategyUpdate strategy = null;
      
      if (n >= 95) //网络信号最佳状态
      strategy = new StrategySaveToMars(log); //信号最佳,把数据上传到火星上
      if ((n >= 50) && (n < 95)) //网络信号最佳状态
      strategy = new StrategySaveToSqlServer(log); //信号一般,执行更新SQL策略
      else if (n < 50)
      strategy = new StrategySaveToLocal(log); //信号差或断线,执行本地缓存策略
      
      return strategy;
   }
   
   /// <summary>
   /// 模拟网络状态
   /// </summary>
   public static IStrategyUpdate Create(ListBox log)
   {
      //这里模拟网络状态, 信号值n>95为极佳状态,50<n<95为较好状态,0<n<50为信号
      Random rm = new Random();
      int n = rm.Next(100); //信号值为最大为100
      
      return Create(n, log);
   }
}


// 来源:www.CSFramework.com, C/S结构框架学习网




C/S框架网|原创精神.创造价值.打造精品

扫一扫加微信
C/S框架网作者微信 C/S框架网|原创作品.质量保障.竭诚为您服务

版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
C/S框架网
上一篇:状态机 - State Machine! C#.Net模拟电梯控制系统!
下一篇:C/S框架精简版-演示程序下载
评论列表

发表评论

评论内容
昵称:
关联文章

开发应用 - 策略模式(Strategy Pattern) 设计模式
设计模式 - 外观模式应用(Façade Pattern)
GoF设计模式:工厂模式(Factory Pattern)
CS系统三层架构扩展支持WCF及策略模式应用(原创)
C#设计模式应用-单件模式(Singleton Pattern)
GoF设计模式:原型模式(Prototype Pattern)—对象的克隆
GoF设计模式:装饰模式(Decorator Pattern)—扩展系统功能
开发应用-职责链模式(Chain Of Resposibility Pattern)
GoF设计模式:桥接模式(Bridge Pattern)—处理多维度变化
GoF设计模式:迭代器模式(Iterator Pattern)—遍历聚合对象中的元素
GoF设计模式:享元模式(Flyweight Pattern)—实现对象的复用
GoF设计模式:适配器模式(Adapter Pattern)—不兼容结构的协调
GoF设计模式:代理模式(Proxy Pattern)—对象的间接访问
企业数据库管理应用系统实现多种登录方式(策略模式)
GoF设计模式:访问者模式(Visitor Pattern)—操作复杂对象结构
C/S自动升级软件之下载升级包策略设计|C/S框架网
CSFramework.WebApi支持多种数据库(Mssql/MySQL/Oracle)
GoF设计模式:命令模式(Command Pattern)—请求发送者与接收者解耦
GoF设计模式:组合模式(Composite Pattern)—树形结构的处理
GoF设计模式:职责链模式(Chain of Responsibility Pattern)—请求的链式处理