public class Receriver { public void say(){ System.out.println("接受者执行方法"); } }接受者中的say()方法是具体执行的方法,也就是请求者要调用的方法。
public interface Command { public void execute(); }然后看一下命令接口的实现类,该类中包括一个命令接受者,在实例化该命令时,为该命令传入一个命令接受者,用于执行具体操作。
public class CommandImpl implements Command { private Receriver rec; public CommandImpl(Receriver rec){ this.rec = rec; } @Override public void execute() { rec.say(); } }然后再看命令请求者,该类中包括一个命令接口,当他 要执行某些操作时,只需要将具体命令传入即可。
public class Invoker { public Command command; public void setCommand(Command command) { this.command = command; } public void run(){ command.execute(); } }
public class Test { public static void main(String[] args) { //创建接受者 Receriver rec = new Receriver(); //创建命令对象,并为命令对象传入接受对象 Command command = new CommandImpl(rec); //创建请求者对象 Invoker invoker = new Invoker(); //将命令对象传入请求者对象中 invoker.setCommand(command); invoker.run(); } }生活中典型的命令模式是用遥控控制电视机开关以及切换频道,下面看一下具体演示。
public class TV { public void turnon(){ System.out.println("电视开机……"); } public void turnoff(){ System.out.println("电视关机……"); } public void changeChannel(int currentChannel){ System.out.println("当前频道"+currentChannel); } }通过遥控器控制电视相当于向电视发送一条条命令,下面看一下命令接口以及执行相应命令的接口。
public interface Command { public void execute(); }下面是开机命令
public class CommandOn implements Command { private TV tv; public CommandOn(TV tv){ this.tv = tv; } @Override public void execute() { tv.turnon(); } }下面是关机命令
public class CommandOff implements Command { private TV tv; public CommandOff(TV tv){ this.tv = tv; } @Override public void execute() { tv.turnon(); } }下面是切换频道命令
public class CommandChange implements Command { private TV tv; private int channel; public CommandChange(TV tv,int channel){ this.tv = tv; this.channel = channel; } @Override public void execute() { tv.changeChannel(channel); } }遥控器相当于请求者,向电视发送一个个命令。下面看一下控制类。
public class Contorl { private Command commandon,commandoff,commandchange; public Contorl(Command commandon,Command commandoff,Command commandchange){ this.commandon = commandon; this.commandoff = commandoff; this.commandchange = commandchange; } public void turnOn(){ commandon.execute(); } public void turnOff(){ commandoff.execute(); } public void turnChange(){ commandchange.execute(); } }然后我们看一下测试类
public class Test { public static void main(String[] args) { TV mytv = new TV(); //开机命令 Command on = new CommandOn(mytv); //关机命令 Command off = new CommandOff(mytv); //切换频道命令 Command change = new CommandChange(mytv, 5); //创建控制对象 Contorl cont = new Contorl(on, off, change); //开机操作 cont.turnOn(); //切换频道 cont.turnChange(); //关机操作 cont.turnOff(); } }命令模式实现了请求者和接受者之间操作的解耦合。
原文地址:http://blog.csdn.net/u011740475/article/details/41647981