Design Pattern Command 命令設計模式,designpattern
本設計模式就是利用不同的類包起不同的命令,達到使用什麼命令就實現什麼操作。
也可以進一步利用map和自己喜歡的命令詞對接起來。
一個執行類實際上已經包含了所有需要的操作了,如:
class SuperMaker{public:string makeCar(){return "Car";}string makePlane(){return "Plane";}};
這裡有兩個命令,下面要做的就是使用不同的類把需要的命令包含起來。
class Command{protected:SuperMaker *sm;public:virtual void exeCmd() = 0;};class MakeCarCmd : public Command{public:MakeCarCmd(SuperMaker *s){sm = s;}void exeCmd(){cout<<sm->makeCar()<<std::endl;}};class MakePlaneCmd : public Command{public:MakePlaneCmd(SuperMaker *s){sm = s;}void exeCmd(){cout<<sm->makePlane()<<std::endl;}};
這裡的MakeCarCmd和MakePlaneCmd這兩個類分別實現不同的命令。使用不同的類就能實現不同的操作。
具體要如何?怎麼使用這些類(命令),那麼可以自己定義,如可以使用map和有意義的字串對應起來,也可以使用一個類包這些命令再次包含起來等操作。
全部代碼:
#include <iostream>#include <string>using std::string;using std::cout;class SuperMaker{public:string makeCar(){return "Car";}string makePlane(){return "Plane";}};class Command{protected:SuperMaker *sm;public:virtual void exeCmd() = 0;};class MakeCarCmd : public Command{public:MakeCarCmd(SuperMaker *s){sm = s;}void exeCmd(){cout<<sm->makeCar()<<std::endl;}};class MakePlaneCmd : public Command{public:MakePlaneCmd(SuperMaker *s){sm = s;}void exeCmd(){cout<<sm->makePlane()<<std::endl;}};int main(){SuperMaker suMa;MakeCarCmd mcc(&suMa);Command *cmdCar = &mcc;MakePlaneCmd mpc(&suMa);Command *cmdPlane = &mpc;cmdCar->exeCmd();cmdPlane->exeCmd();return 0;}
運行:
command 設計模式簡單例子
command模式是命令模式
具體來說,就是將一個請求封裝為一個對象,從而使你可用不同的請求對客戶進行參數化;對請求排隊或記錄請求日誌,以及支援可撤銷的操作.
舉例來說還是畫圖板吧,我們把每次操作都產生一個對象,沒執行一次就把操作儲存在一個資料結構中,如果需要我們可以就行撤銷和恢複操作,這就是命令模式的典型例子
public interface ICommand{
bool Execute();
void Rollback();
}
public class CommandBase:ICommand
{
public virtual bool Execute()
{
return true;
}
public virtual void Rollback()
{
}
}
public class CommandA:CommandBase
{
public override bool Execute(){
Console.Write("CommandA Execute");
return base.Execute();
}
}
public class CommandB:CommandBase
{
public override bool Execute(){
Console.Write("CommandB Execute");
return base.Execute();
}
}
public class CommandC:CommandBase
{
public override bool Execute(){
Console.Write("CommandC Execute");
return base.Execute();
}
}
public class CommandList:CommandBase{
public List<ICommand> _commandList=new List<ICommand>();
public virtual List<ICommand> CreateCommand(){
return new List<ICommand>();
}
public CommandList(){
CreateCommand();
}
public override bool Execute(){
bool result=true;
foreach(ICommand command in _commandList){
result=command.Execute();
if(!result){
command.Rollback();
break;
}
}
return result;
}
}
public class CommandListA:CommandList{
public virtual List<ICommand> CreateCommand(){
List<ICommand> tmpList=new List<ICommand>();
tmpList.Add(new CommandA());
tmpList.Add(new CommandB());
}
}
public class Comm......餘下全文>>
Java設計模式助(命令模式)
先說一下命令模式,舉一個例子說明一下,玉帝傳美猴王上天,玉帝建立了一個命令就是聖旨,然後指出聖旨的接受者美猴王,而太白金星只是傳達命令的人。這個過程就是命令模式的應用。
這個好處就是玉帝將不會直接和美猴王打交道,他只需把命令封裝在聖旨中交給太白金星傳達即可其他的事他就不用問了。
下面再來解釋一下觀察者模式,還以西遊記為例,唐三藏被紅孩兒所困,孫悟空為救他去求菩薩,而菩薩聽後將自己的寶珠淨瓶向海中一摜,只見一隻烏龜馱了一隻瓶子上來。。。。這個烏龜就是觀察者,被觀察的對象就是菩薩,這裡面就可以看出命令模式與之區別,烏龜是等待觀察菩薩的動作,而玉帝是自己發出命令。這裡面有時候很會亂的,觀察者看的是烏龜怎麼來實現,而命令是看發命令的人怎麼安排的。。。。
說的不好,請多諒解!