命令模式 《Head First 設計模式》第六章

2021-08-10 17:37:17 字數 1561 閱讀 2290

將「請求」封裝成物件,以便使用不同的請求、佇列或者日誌來引數化其他物件。命令模式也支援可撤銷操作。

客戶、命令、接受命令執行者、被命令物件

device裝置

//燈具

public

class

light

public

void

off()

}//車庫門

public

class

garagedoor

public

void

close()

}

command命令
public

inte***ce

command

//燈具開啟命令(關閉類似)

public

class

lightoncommand

implements

command

public

void

execute()

public

void

undo()

}//車庫門開啟命令(關閉類似)

public

class

garagedooropencommand

implements

command

public

void

execute()

public

void

undo()

}//空命令

public

class

uncommand

implements

command

public

void

undo()

}

invoker呼叫者
//簡單遙控器

public

class

******remotecontrol

public

void

buttonwaspressed()

public

void

undobuttonwaspressed()

}

client客戶
public

class

******client

}

撤銷操作可以使用棧記錄執行過的命令,在undo時以此取出棧頂命令,並且執行其undo方法。

巨集命令就是用陣列記錄所有命令,並且遍歷執行。

電子**等檔案,需要將操作儲存在硬碟中,當出現宕機之後,從硬碟中獲取之前的操作並且恢復。而不是採用每次操作都將整個電子**等資料都儲存一邊。

模式的形式:

1、每次執行操作,都通過invoker(接受命令並且執行者)呼叫execute將資料儲存(store)到硬碟中

2、出現宕機,開始進行恢復

3、通過invoker呼叫execute將資料從硬碟中載入出來(load)

這樣就滿足了日誌的需求。

Head First設計模式1 命令模式

命令模式 通過命令模式,可以使發出請求的物件與被請求的物件都依賴抽象程式設計,而非依賴具體的類,實現了解耦。並且由於較好的封裝了請求,命令模式可以被撤銷。package command inte ce icommand class light public void on public void o...

《Head First設計模式》之命令模式

命令模式就是將方法呼叫 method invocation 封裝起來。通過封裝方法呼叫,我們可以把運算塊包裝成形,所以呼叫此運算的物件不需要關心事情是如何進行的,只要知道如何使用包裝成形的方法來完成它就可以了。通過封裝方法呼叫,可以用在以下場景 記錄日誌或者重複使用這些封裝來實現撤銷 undo 我對...

Head First設計模式之命令模式

定義 將乙個請求封裝成乙個物件,從而使您可以用不同的請求對客戶進行引數化。對請求排隊或記錄請求日誌,以及支援可撤消的操作。主要解決 在軟體系統中,行為請求者與行為實現者通常是一種緊耦合的關係,但某些場合,比如需要對行為進行記錄 撤銷或重做 事務等處理時,這種無法抵禦變化的緊耦合的設計就不太合適。何時...