設計模式學習005 命令模式

2021-06-29 09:36:36 字數 1347 閱讀 6967

命令模式用來將「請求」封裝成物件,然後用命令物件來引數化其他物件,而且也可以支援撤銷操作。短短一句話,概括了命令模式的精髓下面講解一下這句話中暗藏的原則:

第一:每個命令都是乙個物件,本身有執行(exectue)和撤銷(undo)兩個方法,那個這個物件在執行和撤銷執行方法,總得有個執行物件吧?沒錯,這個物件就是我們的執行者(接受者)(receiver)。也就是真是完成命令下達真實動作的那個物件,毋庸置疑,這個物件肯定是要付給命令物件本身的。這樣一旦命令被執行,命令物件才能知道讓那個物件去執行要做的事情。

第二:為什麼說是使用命令物件來引數化其他物件呢?其實,我們這個很好理解。比方說,我們去餐廳吃飯,首先服務員會給我們乙個選單,我們完成點單(創造乙個命令物件,選單就是我們的命令物件),交給服務員(用選單引數化了服務員,對應於setcommand()),服務員就是我們的呼叫者物件,然後服務員合適時候就會將選單交給做菜的廚師視窗,廚師得到選單(廚師就是我們的receiver),開始做菜(執行命令)。

下面我們就來模擬一下這個問題:

第一步:首選我們創造乙個命令類,這是乙個超類,所有的命令類都是其子類,它規定所有的命令類都必須有執行(exectue)和撤銷執行(undo)這兩個功能。

public inte***ce command
第二步:製造乙個正式的命令子類

public class ordercommand implements command

public void execute()

public void undo()

}

第三步:把真正執行命令的物件(廚師)定義好,他完成命令真正要做的事情。

public class chef 

public void undofood()

}

第四步:定義我們的呼叫者物件。也就是我們的服務員物件

public class servier 

public void startservice()

public void undoservice()

}

第五步:定義我們的客戶物件。也就是客戶端測試**:

public class client 

}

到此為止,命令模式例子既可以完成。下面我們把其對應的uml表示出來,以便於理解。

想一下,訊息佇列如何實現?其實就是乙個執行緒物件不斷執行送過來的命令物件罷了,執行緒物件不斷的從佇列總取出要執行的命令,然後開始執行。僅此而已。

設計模式學習 命令模式

命令模式,將乙個請求封裝為乙個物件,從而使你可以用不同的請求對客戶進行引數化,對請求排隊或記錄請求日誌,以及支援可撤銷操作。命令模式的作用 第一,它能較容易地設計乙個命令佇列 第二,在需要的情況下,可以較容易地將命令計入日誌 第三,允許接收請求的一方決定是否要否決請求。第四,可以容易地實現對請求的撤...

設計模式學習 命令模式

最近在看 headfirst設計模式 一書,正開始學習設計模式不久。哎,就大四了,感覺落後了別人很多,傷感。現在也只能一步乙個腳印,慢慢進步吧。其實,前面已經學過工廠模式 抽象工廠和工廠方法 觀察者模式 單件模式 策略模式。今天把命令模式看完了,看懂並不是很困難,我想困難的是如何在實際中運用它們。因...

重溫設計模式 之005單例模式

重溫設計模式系列原始碼 單例模式 乙個單一的類,該類負責建立自己的物件,同時確保只有單個物件被建立。這個類提供了一種訪問其唯一的物件的方式,訪問者可以直接訪問,不需要例項化該類的物件。保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。乙個全域性使用的類頻繁地建立與銷毀。類物件的例項數 0 1 ...