国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

.NET 下運用策略模式(組合行為和實體的一種模式)

2024-07-10 13:23:21
字體:
來源:轉載
供稿:網友
我簡單的理解策略模式就是把行為(方法)單獨的抽象出來,并采用組合(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");
}
}
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 卢氏县| 临邑县| 岳阳县| 芦溪县| 鄄城县| 修水县| 富宁县| 招远市| 曲靖市| 司法| 阳谷县| 宜良县| 绥江县| 西畴县| 长汀县| 柯坪县| 攀枝花市| 沁阳市| 收藏| 黄石市| 读书| 安溪县| 绥阳县| 普陀区| 南丰县| 佛冈县| 凤翔县| 济源市| 建宁县| 阜南县| 建平县| 麻阳| 长顺县| 上饶市| 平陆县| 吉隆县| 铜陵市| 津市市| 公安县| 七台河市| 涡阳县|