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

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

設計模式之九:命令模式

2019-11-09 18:55:21
字體:
來源:轉載
供稿:網友

      命令模式(Command Pattern):是一個高內聚的模式。

      定義: Encapsulate a request as an object , thereby letting you parameterize clients with different requests ,queue or long requests, and support undoable Operations.(將一個請求封裝成一個對象,從而讓你使用不同的請求把客戶端參數化,對請求排隊或者記錄請求日志,可以提供命令的撤銷和恢復功能。)

     通用類圖:

     

        Receive接收者角色:命令傳遞到這里應該被執行的。

        Command 命令角色: 需要執行的所有命令都在這里聲明。

        Invoker 調用者角色 :接收到命令,并執行命令。

        優點:

        1、類間解耦:  調用者角色和接收者角色之間沒有任何依賴關系,調用者實現功能只需調用Command抽象類的execute方法就可以,不需要了解到底是哪個接收者

        2、可擴展性:Command的子類可以非常容易的擴展,而調用者Invoker和高層次的模塊Client不產生嚴重的代碼耦合

        缺點:

        如果有N個命令,Command的子類就可能是N個,導致類膨脹得非常大

       實現:

      

/// <summary>    /// 通用Receive類    /// </summary>    public abstract class Reveiver    {        //抽象接收者,定義每個接收者都必須完成的業務        public abstract void doSomething();    }    /// <summary>    /// 具體的Receiver類    /// </summary>    public class ConcreteReciver1 : Reveiver    {        //每個接收者都必須處理一定的業務邏輯        public void doSomething()        {         }    }    public class ConcreteReciver2 : Reveiver    {        //每個接收者都必須處理一定的業務邏輯        public void doSomething()        {         }    }    /// <summary>    /// 抽象的Command類    /// </summary>    public abstract class Command    {        //每個命令類都必須有一個執行命令的方法        public abstract void execute();    }    /// <summary>    /// 具體的Command類1    /// </summary>    public class ConcreteCommand1 : Command    {        PRivate Receiver receiver;        public ConcreteCommand1(Receiver _receiver)        {            receiver = _receiver;        }        public void execute()        {            receiver.doSomething();        }    }    /// <summary>    /// 具體的Command類2    /// </summary>    public class ConcreteCommand2 : Command    {        private Receiver receiver;        public ConcreteCommand1(Receiver _receiver)        {            receiver = _receiver;        }        public void execute()        {            receiver.doSomething();        }    }    /// <summary>    /// 調用者Invoker類    /// </summary>    public class Invoker    {        private Command command;                public void SetCommand(Command _command)        {            command = _command;        }        //執行命令        public void  actiong()        {            command.execute();        }    }    public class Client    {        public static void main(String [] args)        {            //首先聲明調用者Invoker            Invoker Invoker = new Invoker();            //定義接收者            Receiver receiver  = new ConcreteReciver1();            //定義一個發送接收者的命令            Command command  = new ConcreteCommand1(receiver);            //把命令交給調用者去執行            Invoker.SetCommand(command);            invoker.action();        }    }   好了,這一章就寫到這,歡迎大家加入QQ群:280993838 。或者關注我的公眾號:


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 文水县| 焉耆| 大连市| 敖汉旗| 舞阳县| 天门市| 乌兰浩特市| 巴彦淖尔市| 突泉县| 怀远县| 富民县| 玛纳斯县| 曲阜市| 龙井市| 太仓市| 乌兰察布市| 九江市| 柏乡县| 桂平市| 嵊州市| 错那县| 巴林左旗| 黔江区| 定兴县| 绥化市| 正阳县| 会宁县| 新竹县| 博野县| 蒙自县| 木里| 江北区| 嵊泗县| 盈江县| 大田县| 靖远县| 巩留县| 海淀区| 阳曲县| 凤翔县| 丰原市|