设计模式之命令模式
来源:互联网 发布:数据侠客行网盘 编辑:程序博客网 时间:2024/06/12 22:12
简介
命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。命令模式是一个高内聚的模式。
优点:
- 类间解耦;
- 可扩展性;
- 命令模式结合其他模式会更优秀
缺点:
使用命令模式可能会导致某些系统有过多的具体命令类。
类图
在该类图中,主要与三个角色:
- Receice接收者对象:该角色就是干活的角色,命令应该是在这里执行;
- Command命令角色:需要执行的所有命令在该类中声明;
- Invoker调用者角色:接收到命令,并执行命令。
例如:在软件开发公司,都是会分不同的组,有不同的组长,然后又项目经理管理、下达命令。直接上类图:
Java代码实现
首先创建一个抽象的组类
public abstract class Group { public abstract void find(); public abstract void uodate(); public abstract void delete(); public abstract void add(); public abstract void change(); }
创建三个具体的组:
public class CodeGroup extends Group { @Override public void find() { System.out.println("找到程序组"); } @Override public void update() { System.out.println("需要更新功能"); } @Override public void delete() { System.out.println("需要删除功能"); } @Override public void add() { System.out.println("需要添加功能"); } } public class PageGroup extends Group{ @Override public void find() { System.out.println("找到前端组"); } @Override public void update() { System.out.println("需要修改页面"); } @Override public void delete() { System.out.println("需要删除页面"); } @Override public void add() { System.out.println("需要添加页面"); } } public class RequirementGroup extends Group { @Override public void find() { System.out.println("找到需求组"); } @Override public void update() { System.out.println("需要更新需求"); } @Override public void delete() { System.out.println("需要删除需求"); } @Override public void add() { System.out.println("需要添加需求"); } }
创建抽象的命令类
public abstract class Command { //定义好具体的组,子类可以直接使用 protected CodeGroup codeGroup = new CodeGroup(); protected PageGroup pageGroup = new PageGroup(); protected RequirementGroup requirementGroup = new RequirementGroup(); public abstract void execute(); }
创建具体的命令类
public class UpdatePageCommand extends Command { @Override public void execute() { //找到前端组 super.pageGroup.find(); //更新页面 super.pageGroup.update(); } }
public class AddRequirementCommand extends Command { @Override public void execute() { super.requirementGroup.find(); super.requirementGroup.add(); } }
创建命令的负责人,也就是下达命令的类:
public class Invoker { private Command command; public void setCommand(Command command) { this.command = command; } public void action(){ this.command.execute();; } }
场景类,也就是我们这里的客户:
public class Client { public static void main(String[] args){ Invoker invoker = new Invoker(); System.out.println("客户提出修改页面"); Command command = new UpdatePageCommand(); invoker.setCommand(command); invoker.action(); System.out.println("\n客户提出新的需求"); Command command1 = new AddRequirementCommand(); invoker.setCommand(command1); invoker.action(); } }
阅读全文
0 0
- 设计模式之命令模式
- 设计模式之命令模式
- 设计模式之命令模式
- 设计模式之命令模式
- 设计模式之命令模式
- 设计模式之--命令模式
- 设计模式之命令模式
- 设计模式之命令模式
- 设计模式之命令模式
- 设计模式之命令模式
- 设计模式之命令模式
- 设计模式之命令模式
- 设计模式之命令模式
- 设计模式之--命令模式
- 设计模式之命令模式
- 设计模式之命令模式
- 设计模式之命令模式
- 设计模式之 命令模式
- raspberry pi 静态地址的配置
- Android制作圆形背景
- C/C++中的实参和形参
- 仿淘宝商品列表切换
- win10上安装acaconda遇到的无法连接到清华镜像的问题
- 设计模式之命令模式
- 纯数据xml通过xslt转换成报表xml
- 594. Longest Harmonious Subsequence
- 关于Android开发中的BroadCastReceive
- IP地址与CIDR
- php 截取缓存,防止lua输出到前台
- JS控制HTML元素的显示和隐藏的2种方法
- 创建java程序线程的三种方式
- 他写出了史上最牛高考满分作文_如今在天猫卖小龙虾