Skip to content

值得您信賴的旅遊品牌 | 團體旅遊、自由行的專家‎

機場接送

Menu
  • 首頁
  • 裝潢設計
  • 旅遊天地
  • 環保清潔
Menu

輕鬆實現記錄與撤銷——C#中的Command模式_網頁設計公司

Posted on 2021-06-112021-06-11 by admin

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

網站的第一印象網頁設計,決定了客戶是否繼續瀏覽的意願。台北網動廣告製作的RWD網頁設計,採用精簡與質感的CSS語法,提升企業的專業形象與簡約舒適的瀏覽體驗,讓瀏覽者第一眼就愛上它。

Command模式屬於行為模式,作為大名鼎鼎的23個設計模式之一,Command模式理解起來不如工廠模式,單例模式等那麼簡單直白。究其原因,行為模式着重於使用,如果沒有編程實踐,確實不如創造模式那麼直白。我們先看看UML類圖。

估計很多同學看着圖就暈了,那麼多東西,Command和Concrete Command還好理解,那些Receiver和Invoker又是什麼東西呢?
 
別著急,只要理解了一點,這個模式就很容易理解了,下面划重點,Command模式最主要的特點,是將命令封裝成類,在類中保存命令執行的上下文(即該命令執行的參數,執行的對象),以實現命令執行對象和命令發出對象的解耦。
 
這樣一來是不是覺得好理解多了?Command類裏面的Receiver,就是命令具體執行的對象。這裏的Client可以理解為裝配環境,在這裏面代碼實例化Command。Invoker內部保存命令(可以保存多條命令,實現命令記錄查看,撤銷等),客戶端代碼通過Invoker來操作命令。接下來我們看看示例代碼。

 

定義Command接口

首先我們定義一個支持撤銷的Command接口。

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

以設計的實用美學觀點,規劃出舒適、美觀的視覺畫面,有效提昇使用者的心理期待,營造出輕鬆、愉悅的網站瀏覽體驗。

    interface Command
    {
        void Execute();
        void Undo();
    }

定義Receiver

接下來我們定義Receiver,也就是命令的執行對象,這裏我們定義一個Ball類。

    class Ball
    {
        public int Size { get; set; } = 10;
        public string Name { get; set; } = "My First Ball";
        public void Inspect()
        {
            Console.WriteLine("My Name is {0} and size is {1}", Name, Size);
        }
    }

定義具體命令

這裏定義兩個命令,一個修改名字,一個修改大小。

    class ChangeNameCommand : Command
    {
        private Ball _Ball;
        private string _OldName;
        public string NameYouWant { get; set; }
        public ChangeNameCommand(Ball ball)
        {
            _Ball = ball;
        }

        public void Execute()
        {
            _OldName = _Ball.Name;
            _Ball.Name = NameYouWant;
        }

        public void Undo()
        {
            _Ball.Name = _OldName;
        }
    }
    
	class ChangeSizeCommand : Command
	{
	//代碼大同小異,略
	}

定義Invoker

接下來是Invoker,,也就是存儲命令,並最終會被用戶代碼調用的類,這裏我們叫它CommandManager。

    class CommandManager
    {
        private Stack<Command> commands = new Stack<Command>();

        public void RunCommand(Command command)
        {
            command.Execute();
            commands.Push(command);
        }

        public void Undo()
        {
            if (commands.Count > 0)
            {
                var command = commands.Pop();
                command.Undo();
            }
        }
        
		public void ShowCommands()
        {
            var temp = commands.Reverse();
            foreach(var command in temp)
            {
                //display command
            }
        }
    }

使用命令

現在我們看看客戶端代碼是怎麼使用他們的,定義Ball,定義命令,通過CommandManager去調用,這樣可以方便查看命令記錄,撤銷命令,等。

        static void Main(string[] args)
        {
            Ball ball = new Ball();
            ball.Inspect();

            ChangeNameCommand changeName = new ChangeNameCommand(ball) { NameYouWant = "Changed" };
            ChangeSizeCommand changeSize = new ChangeSizeCommand(ball) { SizeYouWant = 20 };

            CommandManager manager = new CommandManager();
            manager.RunCommand(changeName);
            manager.RunCommand(changeSize);
            ball.Inspect();

			manager.ShowCommands();
            
            manager.Undo();
            ball.Inspect();

            manager.Undo();
            ball.Inspect();            
        }

就醬,我們已經實現了命令模式,並且還支持命令的記錄與撤銷,希望能對大家有點幫助。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

台中景泰電動車行只是一個單純的理由,將來台灣的環境,出門可以自由放心的深呼吸,讓空氣回歸自然的乾淨,減少污染,留給我們下一代有好品質無空污的優質環境

好站推薦

  • 健康醫療 減重知識專區
  • 婚紗世界 婚紗攝影寫真網
  • 成人話題 未滿18請勿進入
  • 流行時尚 時下流行愛美情報
  • 理財資訊 當舖借貸信用卡各式理財方法
  • 生活情報 各行各業情報資訊
  • 科技資訊 工業電子3C產品
  • 網路資訊 新奇趣味爆笑內容
  • 美食分享 全台各式名產 伴手禮
  • 裝潢設計 買屋賣屋裝修一羅框
  • 視覺設計 T恤、團體服、制服、polo衫

近期文章

  • 勢必要轉化為所謂全通路的概念
  • 未來新能源關鍵將是電池打造科技成長股
  • 台泥由灰變綠 看見樂觀希望
  • 通過國際認證單位德國TUV NORD測試,強攻車用電子商機
  • 搶不到遊戲主機沒關係!外媒曝Xbox有新玩法 售價更便宜

標籤

USB CONNECTOR  到府月嫂 南投搬家公司費用 古典家具推薦 台中室內設計 台中搬家 台中搬家公司 台中電動車 台北網頁設計 台東伴手禮 台東名產 地板施工 大圖輸出 如何寫文案 婚禮錄影 宜蘭民宿 家具工廠推薦 家具訂製工廠推薦 家具訂製推薦 實木地板 床墊 復刻家具推薦 新竹婚宴會館 木地板 木質地板 柚木地板 桃園機場接送 桃園自助婚紗 沙發修理 沙發換皮 海島型木地板 潭子電動車 牛軋糖 租車 網站設計 網頁設計 網頁設計公司 貨運 超耐磨木地板 銷售文案 隱形鐵窗 電動車 馬賽克拼貼 馬賽克磁磚 馬賽克磚

彙整

  • 2022 年 5 月
  • 2022 年 4 月
  • 2022 年 3 月
  • 2022 年 2 月
  • 2022 年 1 月
  • 2021 年 12 月
  • 2021 年 11 月
  • 2021 年 10 月
  • 2021 年 9 月
  • 2021 年 8 月
  • 2021 年 7 月
  • 2021 年 6 月
  • 2021 年 5 月
  • 2021 年 4 月
  • 2021 年 3 月
  • 2021 年 2 月
  • 2021 年 1 月
  • 2020 年 12 月
  • 2020 年 11 月
  • 2020 年 10 月
  • 2020 年 9 月
  • 2020 年 8 月
  • 2020 年 7 月
  • 2020 年 6 月
  • 2020 年 5 月
  • 2020 年 4 月
  • 2020 年 3 月
  • 2020 年 2 月
  • 2020 年 1 月
  • 2019 年 12 月
  • 2019 年 11 月
  • 2019 年 10 月
  • 2019 年 9 月
  • 2019 年 8 月
  • 2019 年 7 月
  • 2019 年 6 月
  • 2019 年 5 月
  • 2019 年 4 月
  • 2019 年 3 月
  • 2019 年 2 月
  • 2019 年 1 月
  • 2018 年 12 月
©2022 值得您信賴的旅遊品牌 | 團體旅遊、自由行的專家‎ | Built using WordPress and Responsive Blogily theme by Superb