首页 > 代码库 > 设计模式之命令模式
设计模式之命令模式
命令模式在书本上是这样说的,将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,队请求排队或者记录请求日志,可以提供命令的撤销或者恢复功能。
我个人认为命令模式比较简单也比较常用,因为它是一个典型的高内聚低耦合模式,封装性非常好,因为他把请求方和执行方分开了。扩展性非常好代码也很简单,下面我改编的书上的例子,我只是简单的改成了通过构造函数进行传递。
需求组
package command; public abstract class Group { //甲乙双方分开办公,如果你要和某个组讨论,你首先要找到这个组 public abstract void find(); //被要求增加功能 public abstract void add(); //被要求删除功能 public abstract void delete(); //被要求修改功能 public abstract void change(); //被要求给出所有的变更计划 public abstract void plan(); }
package command; public class CodeGroup extends Group{ @Override public void find() { System.out.println("找到代码组"); } @Override public void add() { System.out.println("增加一个功能"); } @Override public void delete() { System.out.println("删除一个功能"); } @Override public void change() { System.out.println("变更一个功能"); } @Override public void plan() { System.out.println("变更计划"); } }
package command; public class RequirmentGroup extends Group{ @Override public void find() { System.out.println("找到需求组。。。。"); } @Override public void add() { System.out.println("增加一个功能需求。。。。"); } @Override public void delete() { System.out.println("删除一个功能需求......"); } @Override public void change() { System.out.println("修改一个需求......"); } @Override public void plan() { System.out.println("客户要求给出变更计划....."); } }
抽象的一个命令类
package command; public abstract class Command { //只有一个方法,你要找我做什么事情 public abstract void execute(); }
package command; public class AddRequrimentCommand extends Command{ private Group require; public AddRequrimentCommand(Group group){ this.require = group; } @Override public void execute() { this.require.find(); this.require.add(); } }
package command; public class DeleteCodeCommand extends Command{ private Group code; public DeleteCodeCommand(Group _group){ this.code = _group; } @Override public void execute() { this.code.find(); this.code.delete(); this.code.plan(); } }
接头人
package command; public class Invoker { private Command command; public void setCommand(Command command){ this.command = command; } //执行客户的命令 public void action(){ this.command.execute(); } }
package command; public class Client { public static void main(String[] args) { Invoker invoke = new Invoker(); //客户要求增加一个需求 System.out.println("客户要求增加一个需求。。。。"); //Group group1 = new RequirmentGroup(); //Command command = new AddRequrimentCommand(group1); Group group = new CodeGroup(); Command command = new DeleteCodeCommand(group); invoke.setCommand(command); invoke.action(); } }
可以复制代码进行执行一次,就知道命令模式的具体好处了。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。