1. 程式人生 > 實用技巧 >22、Command 命令模式

22、Command 命令模式

1command

Command Pattern使 使調

便使()

()

使

使"/"""""

2

2.1


//
classAdder{
privateintnum=0;//0

//num
publicintadd(intvalue){
num+=value;
returnnum;
}
}

//
abstractclassAbstractCommand{
publicabstractintexecute(intvalue);//execute()
publicabstractintundo();//undo()
}

//
classConcreteCommandextendsAbstractCommand{
privateAdderadder=newAdder();
privateintvalue;

//execute()調
publicintexecute(intvalue){
this.value=value;
returnadder.add(value);
}

//undo()
publicintundo(){
returnadder.add(-value);
}
}

//
classCalculatorForm{
privateAbstractCommandcommand;

publicvoidsetCommand(AbstractCommandcommand){
this.command=command;
}

//調execute()
publicvoidcompute(intvalue){
inti=command.execute(value);
System.out.println(""+i);
}

//調undo()
publicvoidundo(){
inti=command.undo();
System.out.println(""+i);
}
}

classClient{
publicstaticvoidmain(Stringargs[]){
CalculatorFormform=newCalculatorForm();
AbstractCommandcommand;
command=newConcreteCommand();
form.setCommand(command);//

form.compute(10);
form.compute(5);
form.compute(10);
form.undo();
}
}

10
15
25
15

2.2

CommandQueueCommandQueue

importjava.util.*;

classCommandQueue{
//ArrayList
privateArrayList<Command>commands=newArrayList<Command>();

publicvoidaddCommand(Commandcommand){
commands.add(command);
}

publicvoidremoveCommand(Commandcommand){
commands.remove(command);
}

//調execute()
publicvoidexecute(){
for(Objectcommand:commands){
((Command)command).execute();
}
}
}

CommandQueueInvokerCommandQueue

classInvoker{
privateCommandQueuecommandQueue;//CommandQueue

//
publicInvoker(CommandQueuecommandQueue){
this.commandQueue=commandQueue;
}

//
publicvoidsetCommandQueue(CommandQueuecommandQueue){
this.commandQueue=commandQueue;
}

//調CommandQueueexecute()
publicvoidcall(){
commandQueue.execute();
}
}

使調execute()

3command

Commandexecute()調

ConcreteCommandexecute()調(Action)

Invoker調調調調execute()調

Receiver

使

4

1調

2使調java使

3使使

12

使

使使1GUI 2 CMD

參考於https://gof.quanke.name/

公眾號發哥講

這是一個稍偏基礎和偏技術的公眾號,甚至其中包括一些可能閱讀量很低的包含程式碼的技術文,不知道你是不是喜歡,期待你的關注。

如果你覺得文章還不錯,就請點選右上角選擇傳送給朋友或者轉發到朋友圈~

● 掃碼關注我們

據說看到好文章不推薦的人,伺服器容易宕機!

本文版權歸發哥講部落格園共有,原創文章,未經允許不得轉載,否則保留追究法律責任的權利。