命令模式是乙個高內聚的模式,其定義為: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()
}
呼叫者角色與接收者角色之間沒有任何依賴關係,呼叫者實現功能時只需呼叫command抽象類的execute方法就可以,不需要了解到底是哪個接收者執行。/**
* 場景類
*/public
class
client
}
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...