开发应用 - 策略模式(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框架网|原创作品.质量保障.竭诚为您服务

版权声明:本文为CSFramework文库发布内容,转载请附上原文出处连接
C/S框架网
发表评论

评论内容
昵称:
关联文章

开发应用 - 策略模式(Strategy Pattern) 设计模式
设计模式 - 外观模式应用(Façade Pattern)
C#设计模式应用-单件模式(Singleton Pattern)
CS系统三层架构扩展支持WCF及策略模式应用(原创)
开发应用-职责链模式(Chain Of Resposibility Pattern)
企业数据库管理应用系统实现多种登录方式(策略模式)
C/S自动升级软件之下载升级包策略设计|C/S框架网
CSFramework.WebApi支持多种数据库(Mssql/MySQL/Oracle)
作为一个学生,想问下这套框架是三层架构吗?使用了那些设计模式
设为/取消快捷按钮开发备注
开发应用-命令模式(C#实现POS收银功能)
C#.Net OOP系列之接口设计策略应用实战
软件开发设计 - MIS-管理信息系统-Oracle系统表
开发应用-观察者模式之C#实现缓存数据更新
关于企业版V4.0开发问答
WCF模式以及ADO-Direct模式|C/S框架网
C/S结构快速开发框架使用的DevExpress组件
V4:设置,取消功能报错
DbDataUpdate - 自动提交对象模型数据 - 数据类型测试
C# 使用设计模式构建通用数据库访问类