9 命令模式

2021-08-14 19:57:06 字數 2515 閱讀 6801

命令模式是乙個高內聚的模式,其定義為:encapsulate a request as an object,thereby letting you parameterize clients with different requests,queue or log requests,and support undoable operations.(將乙個請求封裝成乙個物件,從而讓你使用不同的請求把客戶端引數化,對請求排隊或者記錄請求日誌,可以提供命令的撤銷和恢復功能。)

* 通用receiver類

*/public

abstract

class

receiver

/**

* 具體的receiver類

*/public

class

concretereciver1

extends

receiver

}public

class

concretereciver2

extends

receiver

}

/**

* 抽象的command類

*/public

abstract

class

command

/**

* 具體的command類

*/public

class

concretecommand1

extends

command

//必須實現乙個命令

public

void

execute()

}public

class

concretecommand2

extends

command

//必須實現乙個命令

public

void

execute()

}

/**

* 呼叫者invoker類

*/public

class

invoker

//執行命令

public

void

action()

}

/**

* 場景類

*/public

class

client

}

呼叫者角色與接收者角色之間沒有任何依賴關係,呼叫者實現功能時只需呼叫command抽象類的execute方法就可以,不需要了解到底是哪個接收者執行。

command的子類可以非常容易地擴充套件,而呼叫者invoker和高層次的模組client不產生嚴重的**耦合。

命令模式可以結合責任鏈模式,實現命令族解析任務;結合模板方法模式,則可以減少command子類的膨脹問題。

命令模式也是有缺點的,請看command的子類:如果有n個命令,問題就出來了,command的子類就可不是幾個,而是n個,這個類膨脹得非常大,這個就需要在專案中慎重考慮使用。

/**

* 完美的command類

*/public

abstract

class

command

//每個命令類都必須有乙個執行命令的方法

public

abstract

void

execute();

}

/**

* 具體的命令

*/public

class

concretecommand1

extends

command

//設定新的接收者

public

concretecommand1(receiver _receiver)

//每個具體的命令都必須實現乙個命令

public

void

execute()

}public

class

concretecommand2

extends

command

//設定新的接收者

public

concretecommand2(receiver _receiver)

//每個具體的命令都必須實現乙個命令

public

void

execute()

}

/**

* 場景類

*/public

class

client

}

9 命令模式

命令模式是一種高內聚的模式 定義 將乙個請求封裝成乙個物件,從而讓你使用不同的請求把客戶端引數化,對請求排隊或者記錄請求日誌,可以提供命令的撤銷和恢復功能 receive接受類 就是負責幹活的類,命令傳遞到這裡是應該被執行的 command命令類 需要執行的命令都在這裡宣告 invoker呼叫類 接...

設計模式9 命令模式

命令模式 將乙個請求封裝成乙個物件,從而讓你使用不同的請求把客戶端引數化,對請求排隊或者記錄請求日誌,可以提供命令的撤銷 和恢復功能。三個角色 1 receive接收者角色 2 command命令角色 3 invoker呼叫者角色。抽象命令類 public abstract class comman...

9 策略模式

思考 如果想增加取模運算又如何操作?想一想簡單工廠方法,是否有些相似?又有哪些不同?通過介面,隔離封裝 通過繼承,適應變化 工廠模式,我們著眼於得到物件,並操作物件,策略模式,我們著重得到物件某方法的執行結果 inte ce math class mathadd implements math cl...