物件導向程式設計思想 命令模式

2022-01-11 21:17:55 字數 1590 閱讀 8564

一、引言

起初餐館吃飯都是客人和廚師直接溝通,菜譜是一樣的,可是客人多了的時候,有的客人可能有急事不吃了要退單,還有的客人點很多菜需要記錄類別和次序等現象,這時服務員角色的出現解決了問題。那麼面對某些無法抵禦變化的「緊耦合」的場景如何做程式設計呢?命令模式設計便出現了,使得「行為請求者」與「行為實現者」解耦,以便適應變化,讓物件之間呼叫關係更加靈活。下面請看今天要學習的命令模式:

二、命令模式

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

下面是結構圖:

下面是**demo:

//

接收者類

class

receiver

}//命令抽象類

abstract

class

command

//執行命令操作

public

abstract

void

execute();

}//具體命令類

class

concretecommand : command

public

override

void

execute()

}//排程類 要求命令執行這個請求

class

invoker

//執行命令

public

void

executecommand()

}class

program

}

view code

優點:

1.降低系統耦合度,解除請求者和實現者的耦合

2.組合命令,將多個命令裝配成乙個組合命令,即較容易設計乙個命令佇列和巨集命令

3.增加乙個新的命令很容易,無需改變現有的類

4.對請求排隊或記錄請求日誌,支援可撤銷的操作

缺點:

1.針對每乙個命令設計乙個具體的命令類,可能導致系統有過多的具體命令類

使用場景:

1.系統需要請求者和實現者解耦,呼叫者和接收者不直接互動

2.需要在不同的時間支援請求,對請求排隊。乙個命令物件和原來的請求者有不同的生命期。換言之,原來的請求發出者可能已經不在了,而命令物件本身仍然是活動的。這時命令接收者可以在本地,也可以在網路的另乙個位址。命令物件可以在序列之後傳送到另一台機器上去。

3.系統需要支援命令的撤銷(undo)。命令物件可以把狀態儲存起來,等客戶端需要撤銷命令所產生效果時,可以呼叫undo方法,把命令所產生的效果撤銷掉

4.如果乙個系統要將系統中所有資料訊息更新到日誌裡,以便在系統崩潰時,可以根據日誌裡讀回所有資料的更新命令,重新呼叫方法一條一條執行命令,從而恢復系統在崩潰前所作的資料更新

5.使用命令模式作為「callback」在物件導向系統中的替代。"callback"即先將乙個函式註冊上,然後在以後呼叫此函式

物件導向程式設計思想 狀態模式

一 引言 上篇部落格中學習了中介者模式,我們留下了乙個問題,當出現多個玩家需要輸贏狀態條件判斷時,可不可以不去修改中介者類,因為如果每新增乙個條件判斷,就要修改中介者類,破壞了封裝,違背開閉原則。今天我們學習的內容就是要解決這種業務場景,狀態模式 二 狀態模式 定義 當乙個物件的內在狀態改變時允許改...

物件導向程式設計思想 外觀模式

一 引言 每逢去吃午飯路上,幾個同事都要討論一番投資理財的事情,時間久之,小白的我才勉強了解到 與 的區別,是自身直接與某只 交易,可以通過分紅或者低買高賣獲利 自身需要分析 多隻 的 如圖示一 而 是把錢交給 公司,有專業人員幫你分析 或債券等幫你理財 自身不需要直接關注 了,見圖示二 圖示一 圖...

物件導向程式設計思想

舉個最簡單點的例子來區分 有一天要請客吃飯,怎麼辦?有兩個方法 1 買菜,買調料,買肉,買酒水,然後下廚房動手炒菜 2 去飯店,點個 看出來區別了嗎?方法1是面向過程,方法2是物件導向。物件導向有什麼優勢?首先不需要知道各種菜式是怎麼做的,降低了耦合性。如果突然想換 了,對於方法1可能不太容易,因為...