开发应用 - 策略模式(Strategy Pattern) 常用设计模式
开发应用 - 策略模式(Strategy Pattern) 常用设计模式
策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。
策略模式让算法独立于使用它的客户而独立变化。
/// <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结构框架学习网
扫一扫加微信
策略模式(Strategy Pattern)
策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。
策略模式让算法独立于使用它的客户而独立变化。
/// <summary>
/// 更新数据的策略接口
/// </summary>
public interface IStrategyUpdate
{
bool Update(DataTable myData);
}
// 来源:www.CSFramework.com, C/S结构框架学习网
/// 更新数据的策略接口
/// </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>
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结构框架学习网
/// 策略工厂
/// </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结构框架学习网
扫一扫加微信
版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
NewDoc C/S框架网