今天先介绍一下命令模式。
概念:
命令模式(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(); } }