大話設計模式之命令模式

2021-08-08 22:36:07 字數 1632 閱讀 2182

定義:將乙個請求封裝成乙個物件,從而使你可用不同的請求對客戶進行引數化,對請求排隊或記錄請求日誌,以及支援可撤銷的操作。

路邊烤羊肉串的實現

烤羊串者類 兩個方法 乙個是烤羊肉 乙個是烤雞翅

松耦合設計

// 抽象命令

public abstract class command

abstract public void executecommand();

}class bakemuttoncommand : command

public override void executecommand()

}class bakechickenwingcommand : command

public override void executecommand()

}// 服務員

public class waiter

//通知執行

public void notify()

}static void main(string args)

幾個問題點需要改進:真實的情況不是使用者點乙個菜,服務員就通知廚房去做,應該是點完燒烤後,服務員一次通知製作,

2.如果此時雞翅沒了,不應該是客戶來判斷有沒有,應該是服務員或是烤肉串來否決這個請求

3.客戶點了哪些燒烤,這是需要記錄日誌的,以備收費

4.客戶有可能取消部分訂單等。

改進後**如下:

public class waiter else 

} public void cancelorder(command command)

// 通知全部執行

public void notifyall()

}}static void main(stringargs)

// 用來宣告執行操作的介面

abstract class command

abstract public void execute();

}class concretecommand : command

public override void execute()

}class invoker

public void executecommand()

}class receiver

}//客戶端**,建立乙個具體命令物件並設定它的接收者

static void main(string args)

命令模式的優點:

1.它能較容易地設計乙個命令佇列

2.在需要的情況下,可以較容易的將命令記入日誌

3.允許接收請求的一方決定是否要否決請求

4.可以容易地實現對請求的撤銷和重做

5.由於加進新的具體命令類不影響其他的類,因此增加新的具體命令類很容易,

6.命令模式把請求乙個操作的物件與知道怎麼執行乙個操作的物件分割開。

敏捷開發原則告訴我們,不要為**新增基於猜測的、實際不需要的功能。如果不清楚乙個系統是否需要命令模式,一般就不要著急去實現它,事實上,在需要的時候通過重構實現這個模式並不困難,只有在真正需要如撤銷/恢復等操作功能時,把原來的**重構為命令模式才有意義。

大話設計模式 命令模式

引自原書 1.較容易地設計乙個命令佇列 2.在需要的情況下,可以容易地將命令記入日誌 3.允許接收請求的一方決定是否要否決請求 4.可以容易地實現對請求的撤銷和重做 5.由於加進新的具體命令類不影響其他的類,因此增加新的具體命令類很容易 6.命令模式把請求乙個操作物件與知道怎麼執行乙個操作物件分割開...

大話設計模式 命令模式

description 命令的接收執行者 date 2019 5 21 10 26 public class receiver classname command author leo description 抽象命令類 date 2019 5 21 10 26 public abstract cl...

大話設計模式 命令模式

一 命令模式 將乙個請求封裝為乙個物件,從而使你可用不同的請求對客戶進行引數化 對請求排隊或記錄請求日誌,以及支援可撤銷的操作。二 示例 public class barbecue public void bakechickenwing public abstract class command a...