11.18
命令模式:
定义:将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递、调用、增加与管理。
意图:将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。
主要解决:在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为进行记录、撤销或重做、事务等处理时,这种无法抵御变化的紧耦合的设计就不太合适。
代码举例(开灯和关灯)
命令抽象类
public interface Command { public void excute(); public void undo(); }
具体命令对象
public class TurnOffLight implements Command { private Light light; public TurnOffLight(Light light) { this.light = light; } @Override public void excute() { // TODO Auto-generated method stub light.Off(); } @Override public void undo() { // TODO Auto-generated method stub light.On(); } }
实现者
public class Light { String loc = ""; public Light(String loc) { this.loc = loc; } public void On() { System.out.println(loc + " On"); } public void Off() { System.out.println(loc + " Off"); } }
请求者
public class Contral{ public void CommandExcute(Command command) { // TODO Auto-generated method stub command.excute(); } public void CommandUndo(Command command) { // TODO Auto-generated method stub command.undo(); } }