佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > .NET 下運用策略模式(組合行為和實體的一種模式)

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

熱門標簽:團購網(wǎng)站 Linux服務(wù)器 服務(wù)器配置 Mysql連接數(shù)設(shè)置 銀行業(yè)務(wù) 電子圍欄 科大訊飛語音識別系統(tǒng) 阿里云
我簡單的理解策略模式就是把行為(方法)單獨的抽象出來,并采用組合(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.
網(wǎng)上也有很多資源介紹這個模式,我也不從頭說起了。在.NET中委托給我們給我們提供了簡單實現(xiàn)策略模式的方法,可以簡單的把一個委托看成是一種策略方法,而且還能借組lmabda表達式這樣的形式來表達出來。比如,.NET中對數(shù)組排序的Sort的方法就是一個策略模式的實現(xiàn)模板。
復制代碼 代碼如下:

static void Main(string[] args)
{
int[] array = new int[] { 3, 2, 8, 1, 5 };
//相當于是重新設(shè)置了一個排序策略
Array.Sort(array, (a, b) => b - a);
//這里也相當于為每個元素安排了一個輸出策略
Array.ForEach(array, Console.WriteLine);
}

以上Array的兩個方法都可以看成是策略模式在.net中的一種實現(xiàn)。
之前寫一些UI自動化的時候,也借鑒了一下策略模式的思想。下面是我的一個實例:被測試網(wǎng)站是一個針對全球很多市場的一個網(wǎng)站,有時同一個測試點,需要我們配置一下網(wǎng)絡(luò)代理和其它不同的設(shè)置來模擬當?shù)厥袌觥?
復制代碼 代碼如下:

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設(shè)計模式 Strategy(策略模式)
  • 關(guān)于.NET Framework中的設(shè)計模式--應(yīng)用策略模式為List排序
  • java實現(xiàn)策略模式使用示例
  • C#策略模式(Strategy Pattern)實例教程
  • C++設(shè)計模式之策略模式
  • 淺析.net策略模式

標簽:大理 萍鄉(xiāng) 江蘇 棗莊 衡水 蚌埠 廣元 衢州

巨人網(wǎng)絡(luò)通訊聲明:本文標題《.NET 下運用策略模式(組合行為和實體的一種模式)》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    河曲县| 江都市| 晴隆县| 襄汾县| 调兵山市| 黔江区| 牙克石市| 司法| 锡林浩特市| 海宁市| 图片| 东山县| 汨罗市| 阿克苏市| 阳西县| 固阳县| 衡南县| 黑龙江省| 沙洋县| 璧山县| 揭西县| 玉龙| 青岛市| 宁明县| 德钦县| 防城港市| 安康市| 平安县| 乌鲁木齐市| 汪清县| 华亭县| 开江县| 浦县| 富川| 三明市| 高陵县| 广河县| 青龙| 江达县| 天祝| 成武县|