封裝呼叫方法,命令模式能夠把方法呼叫封裝到乙個起來。這樣,命令方法就不用在乎方法內部是做什麼的了,只需要關心封裝的過程,是開還是關閉某些東西。
它能做記錄日誌,或者撤銷等。
現在我們有乙個需求,就是幫家電廠商設計乙個遙控器,這個遙控器有4個鏈結裝置的開關,和乙個撤銷按鈕。如下圖所示:
現在我們看看廠商的家電類有什麼特徵:
首先我們要建立乙個命令介面,是介面模式的基礎:
public
inte***ce command
所有命令物件都要包含實現execute這個方法,下面我們來實現乙個light()物件的開,命令物件吧。
public
class
lightoncommand
implements
command
@override
public
void
execute()
}
這是乙個light物件的(開)命令物件。完成了第乙個命令物件之後,我們來看看怎麼使用該命令物件吧。假設我們有乙個簡單的遙控控制器,它只對應乙個按鈕和乙個插槽。
public
class ******remotecontrol
public
void
setcommand(command command)
//按下按鈕的動作
public
void
buttonwaspressed()
}
命令模式:將「請求」封裝成物件,以便使用不同的請求、佇列或者日誌來引數化其他物件。命令模式也支援可撤銷的操作。命令模式的基礎模型:
undo()方法在下面設計更複雜的命令模式的時候會講到。
下面是能夠控制7個家電裝置和乙個撤回按鈕的遙控器的**:
public
class remotecontrol
undocommand = command;
}public
void
setcommand(int slot, command oncommand, command offcommand)
public
void
onbuttonwaspushed(int slot)
public
void
offbuttonwaspushed(int slot)
@override
public string tostring()
}
下面是點燈開的命令:
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()
}
繼承common的命令:
public
inte***ce command
undo就是命令的撤銷方法,就像點燈的開命令,那麼他的撤銷功能當然是點燈的關啦。
燈物件:
public
class light
public
void
off()
}
測試方法:
public
void
test2()
system.out.println(remotecontrol);
remotecontrol.onbuttonwaspushed(1);
remotecontrol.offbuttonwaspushed(1);
}
命令可以將運算塊打包,然後將它傳來傳去,就像是一般的物件一樣。現在,即使在命令物件被呼叫之後,運算依然可以被呼叫
假設當前有乙個命令佇列,從一端新增需要完成的工作命令,在另一端是乙個執行緒,負責取出執行緒,執行execute()方法。
命令模式:將請求封裝為物件,這可以讓你使用不同的請求、佇列、或者日誌請求來引數化其他物件。命令模式也支援撤銷操作。
設計模式隨筆
設計模式是為了讓程式,具有更好的 重用性 可讀性可擴充套件性 可靠性使程式呈現高內聚低耦合 單一職責原則 介面隔離原則 依賴倒轉原則 黎克特制替換原則 開閉原則 迪公尺特法則 合成復用原則 1.餓漢式 靜態常量 步驟 構造器私有化 防止new 類的內部建立物件 向外暴露乙個靜態的公共方法 實現 pu...
隨筆 設計模式 工廠模式
工廠模式和抽象工廠模式是在日常開發中使用非常廣泛的設計模式。主要用於實現將物件的例項化部分取出來,進而優化系統架構,增強系統的擴充套件性。用工廠方法來代替 new 操作 工廠模式包括工廠方法模式和工廠抽象模式 抽象工廠模式是工廠方法模式的擴充套件 1 定義乙個介面來建立物件,讓子類來決定哪些類需要被...
設計模式隨筆 單件模式
單件模式是可以用來建立獨一無二的,只能有乙個的物件。單件模式的類圖可以說是最簡單的,事實上它的類圖只有乙個類,但是也不要把它想的那麼簡單,因為它也是需要很多限制才能夠安全的執行起來。首先我們來看乙個經典的單件模式的 public class singleton public static singl...