人機交互的方式最初起始于命令列交互,雖然圖形介面的對話模式應用越來越廣泛,可是命令列交互仍然有著它不可替代的地位。 命令列交互程式是以命令列方式進行的HTTP://www.aliyun.com/zixun/aggregation/11432.html">人機交互,即使用者按著程式的提示,一步步進行輸入,而程式負責解釋並最終執行指令。
本文以一個簡單的部署 war 包的實例,說明在命令列交互程式設計中遇到的問題,以及如何使用設計模式來解決這些問題。
實例簡介
在實例中,命令列交互程式給出了一組問題請求使用者輸入,然後根據使用者的輸入將 war 包部署在伺服器上。 如圖 1 所示,應用程式共有 7 個問題,需要使用者輸入不同的部署資訊。 這些問題將以特定的順序和使用者進行交互,使用者則依次給出問題的答案。
圖 1. 單個 war 包部署實例
問題 1. 傳統命令列交互模式不支援回退和跳轉
如圖 1 所示,將 war 包部署到伺服器上共有 7 個問題請求,而使用者並不需要依次回答 7 個問題,當 war 包存在時,使用者只需要回答問題 1、2、3、6、7;而當 war 包不存在時,使用者需要回答 1、2、4、5、6、7。 因此,根據使用者輸入的不同,可能遇到的問題流也不同。 在傳統的命令列交互模式中,使用者只能按照問題流的順序前進,不能回退和跳轉,比如,使用者行進到問題 3 時,無法回退至問題 2。
問題 2. 傳統命令列交互模式很難適應需求變化
當程式的需求發生變化時,傳統的命令列交互模式也很難適應變化。 以圖 1 為例,當需要部署多個 war 包時,流程圖將會變為圖 2 所示,傳統的程式在處理這種變化時,顯得缺乏靈活性。
圖 2. 多個 war 包部署實例
本節將使用設計模式給出圖 1(單個 war 包部署)的設計方案,其後在圖 1 的設計方案的基礎上進行擴展,實現圖 2(多個 war 包部署)的需求。
稱謂約定
為了敘述方便,文中將程式的一個問題提示以及使用者的一個輸入組合稱為一個問題。 而程式提示問題的順序稱為問題流程。 使用者在任何問題時輸入處輸入特定字元返回上一個問題的功能稱為回退,而使用者輸入特定字元和問題編號來顯示某個已提問過的問題的功能稱為跳轉。