最近在看《headfirst設計模式》一書,正開始學習設計模式不久。哎,就大四了,感覺落後了別人很多,傷感。現在也只能一步乙個腳印,慢慢進步吧。
其實,前面已經學過工廠模式(抽象工廠和工廠方法)、觀察者模式、單件模式、策略模式。今天把命令模式看完了,看懂並不是很困難,我想困難的是如何在實際中運用它們。因為它們的確會給我們的程式帶來好處,比如說解耦。
恩,看完書,模仿了書本的例子寫了下面這些,都是自己寫,沒看書了。例子幾乎一樣,本來想寫空調遙控的,因為宿舍就有個,但還是覺得不一樣嗎?只是light換成了空調。居於思維的侷限,就沒去再想其他的例子了。
命令模式中的物件主要包括:命令物件,呼叫者(命令請求者),命令接受者。[color=green]而命令模式就是就是通過命令物件,來實現命令請求者和命令接收者解耦。[/color]
1.類圖(見底)
[img]file:///c:/documents%20and%20settings/rudy/桌面/commandfactory.jpg[/img]
2.**
我分了四個包,分別是:command,receiver,requester和test
a. receiver包----接收者包,在這裡,light就是接收者,由它執行最後的動作。
package reciever;
public class light
public void onlight()
public void offlight()
}
b.command包----命令物件包。命令物件的execute方法執行了接受者(light)的乙個或者幾個action,在由呼叫者control確定什麼時候執行execute。
package command;
/** inte***ce
*/public inte***ce icommand
package command;
import reciever.light;
/** 燈關的命令物件
*/public class lightoffcommand implements icommand
public void execute()
public void undo()
}
package command;
import reciever.light;
/** 燈開的命令物件
*/public class lightoncommand implements icommand
public void execute()
public void undo()
}
package command;
/** 空物件。null object
*/public class nocommand implements icommand
public void undo()
}
c.requester---指遙控器。通過setcommand()方法來獲取icommand,再由子類「決定」需要的哪個command。通過幾個button方法,來決定什麼時候執行相應的事件。接受者作出相應地反映(燈亮,燈滅)。[color=red]這裡即可以體會到,遙控器和燈是解耦的。[/color]
package requester;
import command.icommand;
import command.nocommand;
/** 呼叫者
*/public class remotecontrol
public void setcommand(icommand oncommand,icommand offcommand)
public void onbuttonwaspressed()
public void offbuttonwaspressed()
public void undo()
}
d.測試類
package test;
import command.icommand;
import command.lightoffcommand;
import command.lightoncommand;
import reciever.light;
import requester.remotecontrol;
/** test class
*/public class controltest
}
e.控制台輸出:
the light is open!
the light is close!
the light is open!
設計模式學習 命令模式
命令模式,將乙個請求封裝為乙個物件,從而使你可以用不同的請求對客戶進行引數化,對請求排隊或記錄請求日誌,以及支援可撤銷操作。命令模式的作用 第一,它能較容易地設計乙個命令佇列 第二,在需要的情況下,可以較容易地將命令計入日誌 第三,允許接收請求的一方決定是否要否決請求。第四,可以容易地實現對請求的撤...
設計模式學習筆記 命令模式
定義 將乙個請求封裝成物件,從而讓你使用不同的請求把客戶端引數化,對請求排隊或者記錄請求的日誌,可以提供命令的撤銷和恢復功能。通用類圖如下 通用 如下 命令接受者 public abstract class receiver public class concretereceiver1 extend...
設計模式學習005 命令模式
命令模式用來將 請求 封裝成物件,然後用命令物件來引數化其他物件,而且也可以支援撤銷操作。短短一句話,概括了命令模式的精髓下面講解一下這句話中暗藏的原則 第一 每個命令都是乙個物件,本身有執行 exectue 和撤銷 undo 兩個方法,那個這個物件在執行和撤銷執行方法,總得有個執行物件吧?沒錯,這...