麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

C#設計模式-策略者模式(Strategy)

2019-11-14 13:30:56
字體:
來源:轉載
供稿:網友

策略模式的用意是針對一組算法,將每一個算法封裝到具有共同接口的獨立的類中,從而使得它們可以相互替換。策略模式使得算法可以在不影響到客戶端的情況下發生變化。

策略模式是對算法的包裝,是把使用算法的責任和算法本身分割開,委派給不同的對象管理。策略模式通常把一個系列的算法包裝到一系列的策略類里面,作為一個抽象策略類的子類。用一句話來說,就是:"準備一組算法,并將每一個算法封裝起來,使得它們可以互換。"

模式涉及到三個角色:

1、環境(Context)角色:持有一個Strategy類的引用。

2、抽象策略(ICommunication)角色:這是一個抽象角色,通常由一個接口或抽象類實現。此角色給出所有的具體策略類所需的接口。

3、具體策略(Serial、Lan)角色:包裝了相關的算法或行為。

直接看例子:

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Timers;namespace Demo{    public interface ICommunication    {        bool Send(object data);    }    public class Serial:ICommunication    {        public bool Send(object data)        {            Console.WriteLine("通過串口發送一個數據的算法");            return true;        }    }    public class Lan:ICommunication    {        public bool Send(object data)        {            Console.WriteLine("通過網口發送一個數據的算法");            return true;        }    }    public class Context    {        PRivate ICommunication _communication;        public void SetStrategy(ICommunication communication)//傳遞具體的策略        {            this._communication = communication;        }        public bool Send(object data)        {            return this._communication.Send(data);        }    }    class Program    {          static void Main(string[] args)        {            Console.WriteLine("請輸入通信類型:Lan、Serial");            string input = Console.ReadLine();            object data = new object();            Context ct = new Context();            if (input.Equals("Lan"))  //通過客戶端的選擇,來確定具體用哪種通信算法            {                ct.SetStrategy(new Lan());            }            else            {                ct.SetStrategy(new Serial());            }            ct.Send(data);            Console.ReadKey();          }    }}

運行結果:

截圖20160127134549157

從上面的例子可以看出,Strategy與Factory模式很類似,但Factory在創建時改變對象,而Strategy模式可自由切換。

Strategy模式可用于封裝較差卻易于實現的解決方案,也可以封裝較好卻難以實現的解決方案??墒紫葘崿F較差卻易于實現的解決方案,,然后用這個較差方案進行測試,利用該模式可在后期實現較好的方案,且不必更改調用算法的方案。

策略模式的缺點有:

1. 客戶端必須知道所有的策略類,并自行決定使用哪一個策略類。這就意味著客戶端必須理解這些算法的區別,以便適時選擇恰當的算法類。換言之,策略模式只適用于客戶端知道所有的算法或行為的情況。

2. 策略模式造成很多的策略類。有時候可以通過把依賴于環境的狀態保存到客戶端里面,而將策略類設計成可共享的,這樣策略類實例可以被不同客戶端使用。換言之,可以使用享元模式來減少對象的數量。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 成人短视频在线播放 | 日日噜噜噜噜久久久精品毛片 | 99re热视频这里只精品 | 欧美性生交大片 | 国产精品久久久久久久久久东京 | 中文字幕在线免费观看电影 | 在线看一区二区三区 | 国产毛片毛片 | 天天碰夜夜操 | 在线看免电影网站 | 羞羞草视频 | h久久| 亚洲综合视频网站 | 成人富二代短视频 | 国产做爰全免费的视频黑人 | 久久久久久久久浪潮精品 | 午夜精品视频免费观看 | 亚洲成人精品久久 | 久久成年网| 国产一级毛片国语版 | 一区国产在线观看 | 视频一区二区视频 | 久久综合精品视频 | 97视频| 久久毛片免费观看 | 欧美中文字幕在线视频 | 免费一级高清毛片 | 欧美日韩亚洲精品一区二区三区 | 在线看免费观看日本 | 欧美a区| 中国漂亮护士一级a毛片 | 久久国产精品久久久久久久久久 | 日韩精品二区 | 九九精品在线观看视频 | 九九热在线视频观看 | 黄色特级一级片 | 欧美xxxxx视频 | 成人免费网站在线观看视频 | 欧美性激情视频 | 黄色高清免费网站 | 天天草夜夜骑 |