我简单的理解策略模式就是把行为(方法)单独的抽象出来,并采用组合(Has-a)的方式,来组合行为和实体的一种模式。再来个官方的解释:

Define a family of algorithms, encapsulate each one, and make them interchangeable. Strategy lets the algorithm vary independently from clients that use it.

网上也有很多资源介绍这个模式,我也不从头说起了。在.NET中委托给我们给我们提供了简单实现策略模式的方法,可以简单的把一个委托看成是一种策略方法,而且还能借组lmabda表达式这样的形式来表达出来。比如,.NET中对数组排序的Sort的方法就是一个策略模式的实现模板。

static void Main(string[] args)
{int[] array = new int[] { 3, 2, 8, 1, 5 };//相当于是重新设置了一个排序策略Array.Sort(array, (a, b) => b - a);//这里也相当于为每个元素安排了一个输出策略
    Array.ForEach(array, Console.WriteLine);}

以上Array的两个方法都可以看成是策略模式在.net中的一种实现。

之前写一些UI自动化的时候,也借鉴了一下策略模式的思想。下面是我的一个实例:被测试网站是一个针对全球很多市场的一个网站,有时同一个测试点,需要我们配置一下网络代理和其它不同的设置来模拟当地市场。

using System;
using System.Linq;namespace StrategyPattern
{class Program{static void Main(string[] args){UITest test = new UITest();test.RunTest();test.SetProxy("zh-cn");test.RunTest();}}class UITest{Action proxyStrategy;//Default is US marketpublic UITest(String market = "en-us"){setProxy(market);}public void SetProxy(String market){setProxy(market);}private void setProxy(String market){Type proxy = typeof(Proxy);var m = (from i in proxy.GetMethods()from j in i.GetCustomAttributes(false)let k = j as Marketwhere k != null&& k.MarketName.Contains(market)select i).First();proxyStrategy = (Action)Delegate.CreateDelegate(typeof(Action), null, m);}public void RunTest(){proxyStrategy();//之后运行主要的功能测试//......
        }}class Market : Attribute{public String MarketName { get; set; }public Market(String marketName){this.MarketName = marketName;}}class Proxy{[Market("en-us,es-us")]public void SetUSProxy(){Console.WriteLine("us proxy");}[Market("zh-cn")]public void SetChinaProxy(){Console.WriteLine("china proxy");}[Market("en-gb")]public void SetUKProxy(){Console.WriteLine("uk proxy");}}
}

转载于:https://www.cnblogs.com/heqichang/archive/2012/12/13/2815927.html

.NET 下运用策略模式相关推荐

  1. java spring 实现策略,Spring 环境下实现策略模式的示例

    背景 最近在忙一个需求,大致就是给满足特定条件的用户发营销邮件,但是用户的来源有很多方式:从 ES 查询的.从 csv 导入的.从 MongoDB 查询-.. 需求很简单,但是怎么写的优雅,方便后续扩 ...

  2. SpringBoot下的策略模式,消灭了大量的ifelse,真香!

    前言 项目中有这样一个场景,在公园放置了用来拍摄人像的识别杆,根据用户在不同识别杆之间采集的图象来计算用户的运动距离.由于涉及到许多公园,每个公园的布局不同,识别杆之间距离不同,算法也不同.但代码中每 ...

  3. 在王者荣耀角度下分析面向对象程序设计B中23种设计模式之策略模式

    · 策略模式在王者荣耀中的应用 · 应用一:[登录游戏前]选择通过何种方式登录游戏 应用二:[游戏开始前]选择英雄及其召唤师技能 应用三:[游戏开始后]选择使用普攻还是技能 一.简述 登录游戏前,玩家 ...

  4. 换个姿势学设计模式:策略模式

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源:公众号「闻人的技术博客」 前言 前段时间,接到一个 ...

  5. 策略模式示例代码_策略设计模式示例

    策略模式示例代码 本文是我们名为" Java设计模式 "的学院课程的一部分. 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们. 您将了解模式如此重要的 ...

  6. 小故事说JAVA设计模式-策略模式【Strategy Pattern】

    # 弄清概念 策略模式属于对象的行为模式.其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换.策略模式使得算法可以在不影响到客户端的情况下发生变化 # 策略模式 ...

  7. 设计模式:策略模式,避免冗长的if-else/switch分支判断代码

    策略模式的原理和实现 策略模式,英文全称是 Strategy Design Pattern.定义为:定义彝族算法类,将每个算法分别封装起来,让它们可以互相替换.策略模式可以使算法的变化独立于使用它们的 ...

  8. 观察者模式,策略模式,适配器模式

    观察者模式 1.1.观察者模式概述 观察者模式(Observer),又叫发布-订阅模式(Publish/Subscribe),定义对象间一种一对多的依赖关系(注册),使得每当一个对象改变状态,则所有依 ...

  9. 策略模式 - 这波不亏

    目录 1.引言 2. 为什么引入策略模式 3. 什么情况下使用策略模式 4.策略模式实现 5. 策略模式实例 网易云音乐-王菲-我和我的祖国 1.引言 1.1 LOL四大渡劫 "天雷&quo ...

最新文章

  1. CodeForces 471C MUH and House of Cards
  2. 为什么敏捷方法能在软件开发中行之有效?
  3. [JLOI2011]不重复数字
  4. Linux 环境下安装 Golang
  5. 运维专家:我在大数据项目中踩过的那些坑
  6. H3C s5500-SI-EI系列交换机 WEB界面登录配置
  7. 我最近在学微信小程序开发,一起吗?
  8. mybatis源码分析详解
  9. 苹果个人开发者账号如何升级成公司账号
  10. php开发手册pdf版,TP5.0手册下载
  11. 协作中继认知无线电功率分配
  12. NumberFormat的使用
  13. 解决fatal: No configured push destination.
  14. 某个程序员的工作记录
  15. 使用Python及SMTP协议发送邮件(以163邮箱为例)
  16. Python初学者之路--range函数、切片、if-elif语句
  17. 计算机显卡型号中数字含义详解,显卡型号全解读:那么多字母如何理解?又分别代表啥意思?...
  18. 从大数据舆情传播角度看《三生三世十里桃花》
  19. mac电脑循环次数多少算新_关于 MacBook 的电池问题,你了解多少
  20. 【MVC】MVC分页

热门文章

  1. avl树 php,PHP实现平衡二叉树(AVL树)
  2. ArcGIS10.2不能打开10.6版本创建的镶嵌数据集
  3. MongoDB的Go语言驱动----mgo的使用指南
  4. python rsa加密解密 字符串_python_rsa加密解密
  5. 【java学习之路】(java SE篇)(讨论与思考)关于继承,封装,多态,接口的简单实现与思考
  6. html文本框连接数据库失败,从按钮点击将数据从MySQL数据库加载到HTML文本框
  7. 复制数据库(本地到阿里云)
  8. 在计算机里分数线怎么表示什么意思,高考投档分数线是什么意思 怎么定的
  9. c语言的编译过程,从文本到可执行文件
  10. linux32-bit是什么意思,怎么查看LINUX系统是32bit还是64bit