开发应用 - 策略模式(Strategy Pattern) 常用设计模式
作者:C/S原创  发布日期:2011/03/22 22:23:57
  开发应用 - 策略模式(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框架网|原创作品.质量保障.竭诚为您服务

点击下载附件 点击下载附件 (如下载失败,请邮件通知我们寄回给您,或QQ:23404761留言.)
上一篇 下一篇