命令模式在《Design Patterns: Elements of Reusable Object-Oriented Software》的定義如下:
Encapsulate a request as an object, thereby letting you parameterize clients with different requests, queue or log requests, and support undoable operations.
對(duì)于命令模式的優(yōu)缺點(diǎn)或者代碼樣例可以參考電子工業(yè)出版社的《Java 與模式》和清華大學(xué)出版社的《Java設(shè)計(jì)模式》
下面將重點(diǎn)介紹在函數(shù)式編程中如何實(shí)現(xiàn)命令模式
通過下面的代碼可以發(fā)現(xiàn),其實(shí)命令模式和策略模式的實(shí)現(xiàn)很像,只是在于命令模式有命令的接收者骇塘,在本例中就是MakeDir
這個(gè)類望浩,很多文獻(xiàn)都詳細(xì)介紹了兩者的區(qū)別右蒲,這里就不再贅述豌注,本文的重點(diǎn)是如何使用函數(shù)式編程的思想實(shí)現(xiàn)命令模式的功能妙真。
object CommandPattern {
class MakeDir(name: String){
def createDir(){
val dir = new File(name)
dir.mkdir()
}
def deleteDir(){
val dir = new File(name)
dir.delete()
}
}
def execute(makeDir: MakeDir) = {
()=>{
makeDir.createDir()
}
}
def undo(makeDir: MakeDir) = {
()=>{
makeDir.deleteDir()
}
}
def requestMakedir(askMakedir: () => Unit) = {
askMakedir()
}
def main(args: Array[String]): Unit = {
val makeDir = new MakeDir("tmp")
val executeCommand = execute(makeDir)
val undoCommand = undo(makeDir)
requestMakedir(executeCommand)
requestMakedir(undoCommand)
}
}