• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    .NET 下运用策略模式(组合行为和实体的一种模式)
    我简单的理解策略模式就是把行为(方法)单独的抽象出来,并采用组合(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 market
    public 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 Market
    where 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");
    }
    }
    }
    您可能感兴趣的文章:
    • php设计模式 Strategy(策略模式)
    • 关于.NET Framework中的设计模式--应用策略模式为List排序
    • java实现策略模式使用示例
    • C#策略模式(Strategy Pattern)实例教程
    • C++设计模式之策略模式
    • 浅析.net策略模式
    上一篇:使用C#处理WebBrowser控件在不同域名中的跨域问题
    下一篇:使用Entity Framework(4.3.1版本)遇到的问题整理
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    .NET 下运用策略模式(组合行为和实体的一种模式) .NET,下,运用,策略,模式,