一,什么是策略模式?

1,针对同一命令或行为,不同的策略做不同的动作。

2,比如针对一组算法,将每个算法封装到具有公共接口的独立的类中,从而使它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。

二,如下代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace _19.策略模式
{
/// <summary>
/// 策略模式是对算法的包装,是把使用算法的责任和算法本身分割开,委派给不同的对象负责。
/// 策略模式通常把一系列的算法包装到一系列的策略类里面。
/// 用一句话慨括策略模式就是——“将每个算法封装到不同的策略类中,使得它们可以互换”。
/// </summary>
class Program
{
static void Main(string[] args)
{
while (true)
{
Console.WriteLine("输入第一个数字(整数):");
string type = Console.ReadLine();
int iType = ;
if (!int.TryParse(type, out iType))
{
Console.WriteLine("输入数字无效,请重新输入");
continue;
}
///策略的调用
StrategyContext context = new StrategyContext();
context.SetStrategy(StrategyFortory.CreateInstance((StrategyType)iType));
context.Setup();
}
}
}
/// <summary>
/// 使用工厂模式管理策略
/// </summary>
public class StrategyFortory
{
public static AbstractStrategy CreateInstance(StrategyType type)
{
AbstractStrategy abstractStrategy = null;
switch (type)
{
case StrategyType.Chinese:
abstractStrategy = new ChineseStrategy();
break;
case StrategyType.Usa:
abstractStrategy = new UsaStrategy();
break;
}
return abstractStrategy;
}
}
/// <summary>
/// 抽象策略
/// </summary>
public abstract class AbstractStrategy
{
public abstract void Setup();
}
/// <summary>
/// 具体策略
/// </summary>
public class ChineseStrategy : AbstractStrategy
{
public override void Setup()
{
Console.WriteLine("中国人");
}
}
/// <summary>
/// 具体策略
/// </summary>
public class UsaStrategy : AbstractStrategy
{
public override void Setup()
{
Console.WriteLine("美国人");
}
}
/// <summary>
/// 策略的使用
/// </summary>
public class StrategyContext
{
AbstractStrategy strategy = null;
public void SetStrategy(AbstractStrategy strategy)
{
this.strategy = strategy;
}
public void Setup()
{
this.strategy.Setup();
}
}
/// <summary>
/// 策略枚举
/// </summary>
public enum StrategyType
{
Chinese = ,
Usa =
}
}

最新文章

  1. input标签中button在iPhone中圆角的问题
  2. 【转】iOS9适配
  3. 基础小功能之(1)震动,(2)检测app是否在前台运行
  4. [UCSD白板题] Changing Money
  5. Linux ubuntu 10.10安装OpenCv
  6. 升级webapi依赖的Newtonsoft.json的版本
  7. jquery操作滚动条滚动到指定位置
  8. #使用while循环输入1 2 3 4 5 6 8 9 10
  9. HTTP协议与HTTPS的区别
  10. hdu 5429 Geometric Progression 高精度浮点数(java版本)
  11. windows程序设计读书笔记2——字符显示1
  12. 什么是gulp?
  13. sql 找出不包含字母、不包含汉字的数据
  14. 最小公倍数(BNUOJ30195)
  15. ListView点击Item展开隐藏项(单项展开、多项展开、复杂布局时的展开处理)
  16. python3.5 连接mysql
  17. python 递增递减数列
  18. linux命令在文件中根据命令查找
  19. Hexo博客系列(一)-Windows系统配置Hexo v3.x个人博客环境
  20. python 进程和线程(代码知识部分)

热门文章

  1. CentOS 7 FTP的安装与配置
  2. xml转dict
  3. P2617 Dynamic Rankings(待修改区间第k大)
  4. P.W.N. CTF - Web - Login Sec
  5. 去掉Tomcat网站地址栏的小猫图标
  6. flask之url_for函数
  7. hdu 6055 : Regular polygon (2017 多校第二场 1011) 【计算几何】
  8. spring security权限架架mvn坐标
  9. oppo面试题
  10. 2018年第九届山东省ACM省赛总结