概念:
命令模式:Encapsulates a request as an object, thereby letting you parameterize clients with different requests, queue or log requests, and support undoable operations.将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的赊销和恢复功能。
实现:
指令接口
public interface Command { void execute(); }
具体指令
public class ReaderCommand implements Command { private Book book; public ReaderCommand(Book book){ this.book = book; } @Override public void execute() { book.read(); } }
执行器
public class Invoker { private Command command; public void setCommand(Command command){ this.command = command; } public void action(){ this.command.execute(); } }
测试:
@Test public void commandTes(){ Command command = new ReaderCommand(new Book()); Invoker invoker = new Invoker(); invoker.setCommand(command); invoker.action(); }
分析:
1.具有很好的可扩展性,因为抽象了指令接口做父类。
2.解藕合,执行器不需要关心调用的是什么对象,只关系输入的指令。
3.可以和很多模式结合使用,比如模版方法模式,在执行器或者具体指令中都可添加模版方法。
4.可能也会出现大量的指令类,因为一般指令类只实现一个指令方法。