執行方案(Command) (轉)
這個.可能是變化比較多的一個模式.也是最沒有定型的一個模式.因為
相對比較靈活.常見的是對GUI圖形介面的命令封裝這樣即使更改介面元素只
要功能不變那麼也不影響效果.就如同以前程式導向的環境那要.吧
功能封裝到多個過程.進行.但是Command模式.又一個優點就是可以還原
把以前做過的工作還原到未做工作之前.這個也就是事務性.這就必須要一個
事務列表來維護.事務回滾.當然如果只是單任務那麼只需要一個狀態就可以
判斷是否執行.下面在引出幾個職能.一個是呼叫者.他負責實際的呼叫命令
一個是接收者.他負責告表示命令執行的效果.那麼最後的就是命令本身.
也就是實際工作.他們之間的關係是.客戶透過呼叫者呼叫命令.命令執行完畢
返回執行情況.同時命令具備事務性.如果執行情況沒有成功要還原到原點.
客戶透過執行情況判斷具體狀態.
那麼下面我還是假設一種具體情況.我並打算用圖形介面因為.那麼沒有通用
性.而且Command模式也不一定要用到圖形介面中.假設客戶要申請一個號碼可
是號碼不能是3或3的倍數.下面我們來模擬具體情況.
//構造命令
interface ICommand{
bool state{get; set;}//記錄事務狀態
int Execute();
void UnExecute();//保證事務回滾
}
public class NumCommand : ICommand{
private bool State=false;//事務狀態
public bool state{
get{return State;}
set{State=value;}
}
public int Execute( ){
int revalue;
state=true;//表示已執行
this.r=fr;//指定一個命令接收者
Ran rd=new Randmo();
revalue=(int)(rd.NextDouble()*100);
this.r.Show(revalue);//呈現具體
return revalue;
}
public void UnExecute(){
state=false;//狀態回滾
}
}
//構造接收者
interface IReceiver{}
public class Receiver:IReceiver{
public void Show(int Number){
Console.WriteLine("您申請的序號為:"+Number);
}
}
//呼叫者(呼叫者維護事務),這裡的呼叫者相當實際客戶的.
public class Invoker{
private ICommand command;
private IReceiver receiver;//由接收者負責具體的表示
//裝入實際命令
public void InstallCommand(ICommand c){
this.command=c;
}
//呼叫實際功能
public InvokerExecute(IReceiver r){
Rollback:
int Number=this.command.Execute();
if(Number%3)//是3的倍數{
this.command.UnExecute();
goto Rollback;//事務回滾
}
else{
r.Show(Number);
}
}
}
//客戶呼叫
public class Client {
public static int Main(string[] args){
ICommand command=new NumCommand();
IReceiver r=new Receiver();
Invoker i=new Invoker();
i.InstallCommand(c);//裝入命令
i.InvokerExecute(r);//表示執行
return 0;
}
}
實際上.客戶可以裝入任意的命令.客戶的表示也是可以是任意的.也就是說
呼叫者只負責.事務的維護和把命令對應到具體的接收者上去.如果是介面
中的Command模式.那麼呼叫者就是對指標的封裝.或是事件代理或事件
者.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-998936/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用Command執行儲存過程 (轉)儲存過程
- laravel:從linux命令列執行commandLaravelLinux命令列
- shell指令碼執行錯誤 $‘\r‘:command not found指令碼
- 執行緒 (轉)執行緒
- 執行yarn報錯-node_modules\pngquant-bin: Command failedYarnAI
- Linux Shell執行source或.命令報錯'bash: ..: command not found'Linux
- SUSE Linux執行基本命令出現command-not-foundLinux
- 伺服器安全執行方案伺服器
- K8s YAML檔案中command 執行多條命令K8SYAML
- 執行轉換時如何讓Kettle記錄錯誤並繼續執行?——記一種解決方案
- 【WPF】Command 的一些使用方案
- mac 執行sed -i指令時,總是出現extra characters at the end of commandMac
- 命令模式 :Command(轉自LoveCherry)模式
- Spring Boot Intellij 執行應用的時候 Command line is too long. Shorten command line for 錯誤Spring BootIntelliJ
- 智慧 Monkey 在指定執行的頁面範圍內執行方案
- java的執行流程(轉)Java
- 執行緒轉儲:命名你的執行緒和檢視系統(轉)執行緒
- 大資管行業數字化轉型解決方案 | 行業方案行業
- 利用並行提高sql執行效率(轉)並行SQL
- 請教,UI 自動化執行,併發用例執行解決方案UI
- iOS主執行緒耗時檢測方案iOS執行緒
- 優雅關閉執行緒池的方案執行緒
- SpringBoot手動取消介面執行方案Spring Boot
- 玩轉java多執行緒 之多執行緒基礎 執行緒狀態 及執行緒停止實戰Java執行緒
- oracle中執行os命令(轉)Oracle
- (轉)解決XMind執行卡頓
- IEA:執行清潔能源轉型
- java資料——執行緒(轉)Java執行緒
- VC++ 執行緒同步(轉)C++執行緒
- [轉]Java執行緒詳解Java執行緒
- 捕捉執行很久的SQL(轉)SQL
- 執行緒通訊初探 (轉)執行緒
- POSIX執行緒詳解 (轉)執行緒
- WINDOWS XP 執行命令(轉載)Windows
- 關於多執行緒(轉)執行緒
- 執行力的背後(轉)
- 分析執行計劃優化SQLORACLE的執行計劃(轉)優化SQLOracle
- .NET多執行緒程式設計(3):執行緒同步 (轉)執行緒程式設計