标签:命令模式
public abstract class Group { public abstract void find(); public abstract void add(); public abstract void delete(); public abstract void change(); public abstract void plan(); }
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 Invoker { private Command command; public void setCommand(Command command){ this.command=command; } public void action(){ this.command.execute(); } }
public class CodeGroup extends Group { @Override public void add() { System.out.println("add code"); } @Override public void change() { System.out.println("change code"); } @Override public void delete() { System.out.println("delete code"); } @Override public void find() { System.out.println("find code"); } @Override public void plan() { System.out.println("plan code"); } }
public class PageGroup extends Group { @Override public void add() { System.out.println("add page"); } @Override public void change() { System.out.println("change page"); } @Override public void delete() { System.out.println("delete page"); } @Override public void find() { System.out.println("find page"); } @Override public void plan() { System.out.println("plan page"); } }
public class RequirementGroup extends Group { @Override public void add() { System.out.println("add requirement"); } @Override public void change() { System.out.println("change requirement"); } @Override public void delete() { System.out.println("delete requirement"); } @Override public void find() { System.out.println("find requirement"); } @Override public void plan() { System.out.println("plan requirement"); } }
public class AddRequirementCommand extends Command { /** * 执行增加一项需求的命令 */ @Override public void execute() { super.rg.find(); super.rg.add(); super.rg.plan(); } }
public class DeletePageCommand extends Command { /** * 删除页面的命令 */ @Override public void execute() { super.pg.find(); super.rg.delete(); super.rg.plan(); } }
如何调用呢? 直接调用这个类的execute方法不就行了吗? 为了更加体现依赖关系和系统设计特点(无论接受了什么命令,都要接受和执行),调用者和接受者没有任何依赖关系。调用者只需要调用Command抽象类的execute方法即可,不需要了解谁执行了。
public class Client { public static void main(String[] args) { Invoker invoker=new Invoker(); System.out.println("--------客户要求增加一项需求-------------"); Command command = new AddRequirementCommand(); //使用早就写好的东西 command.execute(); invoker.setCommand(command); invoker.action(); } } /*高内聚 *调用者Invoker和接受者Group没有依赖,Command容易扩展 *缺点就是如果Command子类多的话,需要N多个的子类去一个一个实现 */
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:命令模式
原文地址:http://blog.csdn.net/cjvs9k/article/details/46966219