1).下面以Boss和Clerk为例:
Clerk.java代码如下:
package com.flyingh.receiver;
public class Clerk {
public void action() {
System.out.println("**************");
}
}
Command.java代码如下:
package com.flyingh.icommand;
public interface Command {
void execute();
}
ConcreteCommand.java代码如下:
package com.flyingh.command;
import com.flyingh.icommand.Command;
import com.flyingh.receiver.Clerk;
public class ConcreteCommand implements Command {
private Clerk clerk;
public ConcreteCommand(Clerk clerk) {
super();
this.clerk = clerk;
}
@Override
public void execute() {
// TODO Auto-generated method s
clerk.action();
}
}
Boss.java代码如下:
package com.flyingh.invoker;
import com.flyingh.icommand.Command;
public class Boss {
private Command command;
public Command getCommand() {
return command;
}
public void setCommand(Command command) {
this.command = command;
}
public void action() {
command.execute();
}
}
Client.java代码如下:
package com.flyingh.client;
import com.flyingh.command.ConcreteCommand;
import com.flyingh.icommand.Command;
import com.flyingh.invoker.Boss;
import com.flyingh.receiver.Clerk;
public class Client {
public static void main(String[] args) {
Boss boss = new Boss();
Clerk clerk = new Clerk();
Command command = new ConcreteCommand(clerk);
boss.setCommand(command);
boss.action();
}
}
程序运行结果如下:
**************
2).下面以Invoker点击三个按钮(on,off,undo)来控制Light的on,off和undo为例,代码如下:
Command.java
package com.flyingh.icommand;
public interface Command {
void execute();
void undo();
}
Light.java
package com.flyingh.receiver;
public class Light {
public void on() {
// TODO Auto-generated method stub
System.out.println("turn on the light!");
}
public void off() {
// TODO Auto-generated method stub
System.out.println("turn off the light!");
}
}
LightOnCommand.java
package com.flyingh.command;
import com.flyingh.icommand.Command;
import com.flyingh.receiver.Light;
public class LightOnCommand implements Command {
private Light light;
public LightOnCommand(Light light) {
super();
this.light = light;
}
@Override
public void execute() {
// TODO Auto-generated method stub
light.on();
}
@Override
public void undo() {
// TODO Auto-generated method stub
light.off();
}
}
LightOffCommand.java
package com.flyingh.command;
import com.flyingh.icommand.Command;
import com.flyingh.receiver.Light;
public class LightOffCommand implements Command {
private Light light;
public LightOffCommand(Light light) {
super();
this.light = light;
}
@Override
public void execute() {
// TODO Auto-generated method stub
light.off();
}
@Override
public void undo() {
// TODO Auto-generated method stub
light.on();
}
}
Invoker.java
package com.flyingh.invoker;
import com.flyingh.icommand.Command;
public class Invoker {
private Command lightOnCommand;
private Command lightOffCommand;
private Command undoCommand;
public Invoker() {
super();
// TODO Auto-generated constructor stub
}
public Invoker(Command lightOnCommand, Command lightOffCommand) {
super();
this.lightOnCommand = lightOnCommand;
this.lightOffCommand = lightOffCommand;
}
public void OnButtonClick() {
lightOnCommand.execute();
undoCommand = lightOnCommand;
}
public void OffButtonClick() {
lightOffCommand.execute();
undoCommand = lightOffCommand;
}
public void undoButtonClick() {
undoCommand.undo();
}
}
Client.java
package com.flyingh.client;
import com.flyingh.command.LightOffCommand;
import com.flyingh.command.LightOnCommand;
import com.flyingh.invoker.Invoker;
import com.flyingh.receiver.Light;
public class Client {
public static void main(String[] args) {
Light light = new Light();
LightOnCommand lightOnCommand = new LightOnCommand(light);
LightOffCommand lightOffCommand = new LightOffCommand(light);
Invoker invoker = new Invoker(lightOnCommand, lightOffCommand);
invoker.OnButtonClick();
invoker.OffButtonClick();
invoker.undoButtonClick();
}
}
程序运行结果如下:
turn on the light!
turn off the light!
turn on the light!
3).一次打开或者关闭多个(宏命令):
Command.java
package com.flyingh.icommand;
public interface Command {
void execute();
void undo();
}
Receiver.java
package com.flyingh.ireceiver;
public interface Receiver {
void on();
void off();
}
MacroOnCommand.java
package com.flyingh.command;
import java.util.List;
import com.flyingh.icommand.Command;
import com.flyingh.ireceiver.Receiver;
public class MacroOnCommand implements Command {
private List<Receiver> list;
public MacroOnCommand(List<Receiver> list) {
super();
this.list = list;
}
@Override
public void execute() {
// TODO Auto-generated method stub
for (Receiver receiver : list) {
receiver.on();
}
}
@Override
public void undo() {
// TODO Auto-generated method stub
for (Receiver receiver : list) {
receiver.off();
}
}
}
MacroOffCommand.java
package com.flyingh.command;
import java.util.List;
import com.flyingh.icommand.Command;
import com.flyingh.ireceiver.Receiver;
public class MacroOffCommand implements Command {
private List<Receiver> list;
public MacroOffCommand(List<Receiver> list) {
super();
this.list = list;
}
@Override
public void execute() {
// TODO Auto-generated method stub
for (Receiver receiver : list) {
receiver.off();
}
}
@Override
public void undo() {
// TODO Auto-generated method stub
for (Receiver receiver : list) {
receiver.on();
}
}
}
Light.java
package com.flyingh.receiver;
import com.flyingh.ireceiver.Receiver;
public class Light implements Receiver {
@Override
public void on() {
// TODO Auto-generated method stub
System.out.println("turn on the light!");
}
@Override
public void off() {
// TODO Auto-generated method stub
System.out.println("turn off the light!");
}
}
TV.java
package com.flyingh.receiver;
import com.flyingh.ireceiver.Receiver;
public class TV implements Receiver {
@Override
public void on() {
// TODO Auto-generated method stub
System.out.println("turn on the TV!");
}
@Override
public void off() {
// TODO Auto-generated method stub
System.out.println("turn off the TV!");
}
}
Radio.java
package com.flyingh.receiver;
import com.flyingh.ireceiver.Receiver;
public class Radio implements Receiver {
@Override
public void on() {
// TODO Auto-generated method stub
System.out.println("turn on the radio!");
}
@Override
public void off() {
// TODO Auto-generated method stub
System.out.println("turn off the radio!");
}
}
Invoker.java
package com.flyingh.invoker;
import com.flyingh.icommand.Command;
public class Invoker {
private Command macroOnCommand;
private Command macroOffCommand;
private Command macroUndoCommand;
public Invoker() {
super();
// TODO Auto-generated constructor stub
}
public Invoker(Command lightOnCommand, Command lightOffCommand) {
super();
this.macroOnCommand = lightOnCommand;
this.macroOffCommand = lightOffCommand;
}
public void onButtonClick() {
macroOnCommand.execute();
macroUndoCommand = macroOnCommand;
}
public void offButtonClick() {
macroOffCommand.execute();
macroUndoCommand = macroOffCommand;
}
public void undoButtonClick() {
macroUndoCommand.undo();
}
}
Client.java
package com.flyingh.client;
import java.util.ArrayList;
import java.util.List;
import com.flyingh.command.MacroOffCommand;
import com.flyingh.command.MacroOnCommand;
import com.flyingh.icommand.Command;
import com.flyingh.invoker.Invoker;
import com.flyingh.ireceiver.Receiver;
import com.flyingh.receiver.Light;
import com.flyingh.receiver.Radio;
import com.flyingh.receiver.TV;
public class Client {
public static void main(String[] args) {
Receiver light = new Light();
Receiver tv = new TV();
Receiver radio = new Radio();
List<Receiver> list = new ArrayList<Receiver>();
list.add(light);
list.add(tv);
list.add(radio);
Command macroOnCommand = new MacroOnCommand(list);
Command macroOffCommand = new MacroOffCommand(list);
Invoker invoker = new Invoker(macroOnCommand, macroOffCommand);
invoker.onButtonClick();
invoker.offButtonClick();
invoker.undoButtonClick();
}
}
程序运行结果如下:
turn on the light!
turn on the TV!
turn on the radio!
turn off the light!
turn off the TV!
turn off the radio!
turn on the light!
turn on the TV!
turn on the radio!