當我們有一台多功能的印表機,然後通過電腦直接進行任務,如圖
如果通過這樣的設計直接去呼叫多功能一體機的功能,就會存在此時此刻只能進行乙個任務,不允許有多個客戶端同時操作.
那麼現在我們就需要考慮一種新的設計模式,叫做命令設計模式。
命令設計模式:將乙個請求封裝為乙個物件,從而使你可用不同的請求對客戶進行引數化;對請求排隊或記錄請求日誌,以支援可撤銷操作.
按照設計模式的概念將乙個請求封裝為乙個物件,從而使你可用不同的請求對客戶進行引數化,我們有必要去寫乙個命令的介面,下面繼承各類命令。對請求排隊或記錄請求日誌,以
支援可撤銷操作.我們需要去寫乙個服務類與命令聚合,這樣我們只需要呼叫服務類就可以執行命令,然後通過命令去執行一體機的操作.
uml如下:
按照這樣的設計有如下幾點好處:
1,可以較為容易設計乙個命令佇列
2,在需要情況下可以較容易地將命令記入日誌
3,允許接收請求的一方決定是否要否決請求
4,可以容易地實現對請求的撤銷和重做
5,增加命令類操作遵守了開閉原則
6,命令模式把請求乙個操作物件與指導怎麼執行乙個操作的物件分隔開
源**:
多功能一體機.class
public class 多功能一體機
public void 列印()
public void 傳真()
}
命令.class
public inte***ce 命令
列印.class
public class 列印 implements 命令
}
傳真.class
public class 傳真 implements 命令
}
影印.class
public class 影印 implements 命令
}
多功能一體機服務程式.class
public class 多功能一體機服務程式
public void 加入任務(命令 cmd)
public void 移除任務(命令 cmd)
public void 執行任務()
}}
main.class
public class main
}
最後輸出:
影印執行
傳真執行
設計模式之命令設計模式
先來看一下命令模式的類圖 乍一看好像類很多,其實我們逐個分析他們。類圖中存在的類可以分為 invoker icommand conceretecommand receiver invoker類 上層直接調取invoker類 icommand 是對命令的抽象 conceretecommand 是命令的...
設計模式之命令模式
command pattern 將請求封裝成物件,這可以讓你使用不同的請求,佇列,或者是日誌請求來引數化其他物件,命令模式也可以支援撤銷操作。命令模式有兩種實現方式 1.在命令管理器中提供設定當前命令接受者的方法,當執行訊息或者是有訊息壓入的時候直接將命令傳送給當前設定的接受者。2.在命令管理器中建...
設計模式之命令模式
1 命令模式 commond 將乙個請求封裝為乙個物件,從而使你可用不同的請求對客戶進行引數化 對請求排隊或記錄請求日誌,以及支援可撤銷的操作。uml圖如下 2 命令模式作用的優點 第一,它能較容易地設計乙個命令佇列 第二,在需要的情況下,可以較容易地將命令記入日誌 第三,允許接收者請求的一方決定是...