
命令模式【Command Pattern】
Command(命令):定义了一个操作的接口,子类实现具体的操作逻辑。 Receiver(接收者):负责执行命令,通常是具体的操作实现类。 Invoker(调用者):接收命令并执行,通常是高层次的调用者,如项目经理。 高内聚:命令和接收者分开,减少了直接的依赖关系。 可扩展性:新增命令只需创建新的Command子类,无需修改接收者。 易于调试和维护:每个命令可以独立处理,方便排查问题。 类膨胀:大量的Command子类可能导致类结构复杂。 性能开销:每次命令执行都可能带来一定的性能开销。
发布日期:2021-05-08 00:09:35
浏览次数:16
分类:精选文章
本文共 1754 字,大约阅读时间需要 5 分钟。
命令模式(Command Pattern)是一种设计模式,用于将请求分解为一系列命令,分别由对应的接收者执行。这种模式将请求方(Invoker)和执行方(Receiver)分开,使得系统更加灵活和可扩展。
命令模式的核心概念
命令模式的实现
在项目管理中,项目经理作为调用者(Invoker),接收客户的命令并分配给相应的组执行。每个组(如需求组、美工组、代码组)作为接收者(Receiver),负责执行特定的操作。
优化后的代码示例
// 命令的抽象类public abstract class Command { // 定义三个组 protected RequirementGroup rg = new RequirementGroup(); protected PageGroup pg = new PageGroup(); protected CodeGroup cg = new CodeGroup(); // 每个命令都要实现的方法 public abstract void execute();}// 增加一项需求的命令public class AddRequirementCommand extends Command { @Override public void execute() { rg.find(); rg.add(); pg.add(); cg.add(); rg.plan(); }}// 删除一个页面的命令public class DeletePageCommand extends Command { @Override public void execute() { pg.find(); rg.delete(); cg.delete(); pg.plan(); }}// 项目接头人(调用者)public class Invoker { private Command command; // 接收命令 public void setCommand(Command command) { this.command = command; } // 执行命令 public void action() { command.execute(); }}// 客户端public class Client { public static void main(String[] args) { Invoker xiaoSan = new Invoker(); // 接头人 Command command = new AddRequirementCommand(); xiaoSan.setCommand(command); xiaoSan.action(); // 同样可以创建DeletePageCommand并执行 }}
优点
缺点
应用场景
- 需要频繁修改或撤销操作的系统。
- 当直接调用具体实现会导致代码耦合时。
- 需要支持多种操作类型,且操作可以被撤销或重做时。
总结
命令模式通过将操作封装为命令,使系统设计更加灵活和可维护。它将请求方和执行方分开,提升了系统的扩展性和可维护性,特别适用于需要频繁修改和撤销操作的项目管理场景。