今天先介绍一下命令模式。
概念:
命令模式(Command):将一个请求封装成一个对象,从而使你可用不同的请求对象对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。
组成:
(1)、抽象命令类(Commamd):提供一个执行操作的接口;
(2)、具体命令类(ConcreteConmmad):完成或继承抽象命令类,提供具体命令的实现:将一个接受者类绑定为一个动作,调用接受者对应的操作。
(3)、接受者类(Receiver):完成具体操作;
(4)、请求者类(Invoker):提供请求者对应的操作。
优点:
容易把命令加入集合,封装具体实现。
示例代码:
package Pattern;
import java.util.ArrayList;
interface Receiver {
public void Action();
}
class Receiver1 implements Receiver {
public void Action() {
System.out.println("执行动作1!");
}
}
class Receiver2 implements Receiver {
public void Action() {
System.out.println("执行动作2!");
}
}
abstract class Command {
protected Receiver myReceiver;
public Command(Receiver tempReceiver) {
myReceiver = tempReceiver;
}
abstract public void Excute();
}
class ConcreteCommand extends Command {
public ConcreteCommand(Receiver tempReceiver) {
super(tempReceiver);
}
public void Excute() {
myReceiver.Action();
}
}
class Invoker {
private ArrayList<Command> myCommand=new ArrayList<Command>();//一定要实例化
public void Add(Command tempCommand) {
myCommand.add(tempCommand);
}
public void Excute() {
for (int i = 0; i < myCommand.size(); i++)
myCommand.get(i).Excute();
}
}
public class CommandPattern {
public static void main(String[] a) {
ConcreteCommand myConcreteCommand1 = new ConcreteCommand(
new Receiver1());
ConcreteCommand myConcreteCommand2 = new ConcreteCommand(
new Receiver2());
Invoker myInvoker = new Invoker();
myInvoker.Add(myConcreteCommand1);
myInvoker.Add(myConcreteCommand2);
myInvoker.Add(myConcreteCommand1);
myInvoker.Excute();
}
}
原文地址:http://blog.csdn.net/hishentan/article/details/25503917