慈溪企业网站建设,网站设计哪家比较好,华强北做电子网站,英德市城乡建设局网站命令模式#xff08;Command Pattern#xff09;
定义
命令模式是对命令的封装#xff0c;每一个命令都是一个操作#xff1a;请求的一方发出请求要求执行一个操作#xff1b;接收的一方收到请求#xff0c;并执行操作。 命令模式解耦了请求方和接收方#xff0c;请求…命令模式Command Pattern
定义
命令模式是对命令的封装每一个命令都是一个操作请求的一方发出请求要求执行一个操作接收的一方收到请求并执行操作。 命令模式解耦了请求方和接收方请求方只需请求执行命令不用关心命令是怎样被接收怎样被操作以及是否被执行等。
命令模式是将请求封装成一个对象这样可以使用不同的请求参数化其他对象依赖注入并且能够支持请求的排队执行、记录日志、撤销等功能。
本质解耦命令请求与处理。
属于行为型模式。
适用场景 命令模式的适用场景 1.实现语义中的“命令”的操作如命令菜单shell命令 2.请求调用者和请求的接收者需要解耦使得调用者和接收者不直接交互。 3.需要抽象出等待执行的行为比如撤销undo和恢复redo等操作。 4.需要支持命令宏及命令组合操作 标准示例 ICommand 命令接口 ConcreteCommand 具体命令实现类 Invoker 调用类构造方法入参为 ICommand它的execute方法实际调用的是传入对象的 cmd.execute() Receiver 接收类只有一个方法action 调用类和接收类通过ConcreteCommand 实现了解耦。
具体代码如下
//命令接口
public interface ICommand {void execute();
}//具体命令接口
public class ConcreteCommand implements ICommand{//每个命令对应一个不同的receiverprivate Receiver receiver new Receiver();Overridepublic void execute() {receiver.action();}
}/*** 调用者*/
public class Invoker {private ICommand cmd;public Invoker(ICommand cmd){this.cmd cmd;}public void execute(){this.cmd.execute();}
}/*** 接收者*/
public class Receiver {public void action(){System.out.println(执行动作);}
}public class ClientTest {public static void main(String[] args) {ICommand cmd new ConcreteCommand();Invoker invoker new Invoker(cmd);invoker.execute();}
}生活中也有很多命令模式的例子。 比如遥控器它把我们的请求和设备的执行做了解耦将请求和执行做了分离。 比如餐厅点菜单客人按照菜单点菜后厨根据菜单配菜做菜菜单就是个解耦的介质将请求和执行做了解耦可以达到灵活扩展的目的。 下面举个智能空调的例子 现在的空调都支持APP操控了。这必然就涉及到 设备与服务器 的交互。 我们现在定义2个接口 设备注册设备心跳上送 我们使用命令模式来实现这四个接口。 相应的类为 ICommand、AbstractCommand、 RegistCommand、HeartbeatCommand Invoker、 Receiver ICommand
public interface ICommand {void execute();
}AbstractCommand
public abstract class AbstractCommand implements ICommand {protected Receiver receiver new Receiver();
}RegistCommand
public class RegistCommand extends AbstractCommand {public void execute() {receiver.registAction();}
}public class HeartbeatCommand extends AbstractCommand {public void execute() {receiver.heartbeatAction();}
}Receiver
public class Receiver {public void registAction(){System.out.println(regist ...);}public void heartbeatAction(){System.out.println(heartbeat ...);}
}Invoker
public class Invoker {public void execute(ICommand command){command.execute();}
}ClientTest
public class ClientTest {public static void main(String[] args) {Invoker invoker new Invoker();invoker.execute(new RegistCommand());Invoker invoker1 new Invoker();invoker1.execute(new HeartbeatCommand());}
}执行结果
regist ...
heartbeat ...以上就是命令模式全部内容感谢阅读。