將請求封裝成物件,以便使用不同的請求、佇列或者日誌來引數化其他物件,也支援對其進行撤銷。
當然接收者一般也有自己的介面,圖中的接收者一般為乙個接收者的具體實現。
接收者介面:
/**
* 燈光介面(抽象接收者)
*/public
inte***ce
light
具體接收者:
/**
* 客廳燈光(具體接收者)
*/public
class
livinglight
implements
light
@override
public
void
off()
}
命令介面:
/**
* 抽象命令介面
*/public
inte***ce
command
具體命令:
/**
* 開燈命令(具體命令)
*/public
class
lightoncommand
implements
command
@override
public
void
execute()
@override
public
void
undo()
}
/**
* 關燈命令(具體命令)
*/public
class
lightoffcommand
implements
command
@override
public
void
execute()
@override
public
void
undo()
}
/**
* 呼叫者
*/public
class
invoker
public
void
action()
public
void
undoaction()
}
public
class
initmain
}
命令模式將發出請求的物件和執行請求的物件解耦,在兩者之間通過命令物件溝通,而命令物件封裝接收者和一系列的動作。命令物件也可以通過新增undo()方法來實現對execute()方法的撤銷動作。甚至可以通過寫乙個巨集命令(巨集命令是命令的一種延伸,允許呼叫多個命令)來執行一組命令。
優點:通過將一組動作或複雜的運算及乙個接收者打包成乙個命令物件,並將命令物件放在特定的應用中並在特定的時間執行來達到特殊的目的。如:執行緒池,佇列中等。
缺點:每乙個命令都會有乙個命令子類,如果系統中命令過多,則會產生大量的命令子類。
設計模式 命令設計模式
一句話總結 命令設計模式的實質是將命令定義,命令的執行分離開,從而提公升了系統的解藕性 結構 命令的抽象command 命令的具體實現concretecommand 命令處理者抽象ireceiver 命令處理者的具體實現concretereceiver 命令的呼叫者invoker 客戶端client...
設計模式 命令模式
1 命令模式的角色組成 1 命令角色 command 生命執行操作的介面。介面或抽象類來實現。2 具體命令角色 concrete command 將乙個接收者物件繫結於乙個動作 呼叫接收者相應的操作,以實現命令角色宣告的執行操作的介面。3 客戶角色 client 建立乙個具體命令物件 並可以設定它的...
設計模式 命令模式
1 command.h ifndef command h define command h include include include using namespace std class chef 廚師,具體命令的執行者 class command 命令基類 class makemuttonco...