23种设计模式之_命令行模式
来源:互联网 发布:乐宝宝 乐普数据下载 编辑:程序博客网 时间:2024/06/06 15:00
前言
设计模式也已经总结了十多种,总的来说的还是对java的三大特性进行反复使用,形成的固定写法,越往后面学习,越觉得23种设计模式就是对java三大特性总结的缩小版。仅个人愚见
定义:命令行模式并非一行行命令的执行,而是写法上类似对一个具体逻辑的封装。(内部进行封装具体的实现)
Uml类图
衍生出来命令行模式写法
源码分析
由于实在是简单,看着类图就可以联想出来具体的实现方式,这里不进行贴代码,只是把命令行模式贴出来(还是贴…….)
Client( 客户端)
package patterncommond;public class Client { public static void main(String[] args) { Commond commond = new DeleCodeCommond(); Invorker invorker = new Invorker(); invorker.setCommond(commond); invorker.actionCommond(); /* 撤销不做了 */ Commond undoCommond = new UnDoCodeCommond(); invorker.setCommond(undoCommond); invorker.actionCommond(); }}
客户端,类似使用程序的客户,想要改需求,则需要通过Invorker(项目经理)发布ActionCommond进行具体实现
Commond(命令)
package patterncommond;public abstract class Commond { protected Coder coder = new Coder(); // 代码编写 protected MG mg = new MG();// ui切图 /** * 具体命令的执行模板 */ abstract void exe();}
Inverker(项目经理)
package patterncommond;public class Invorker { protected Commond commond; // 抽象命令 /** * 设置命令 * * @param commond */ public void setCommond(Commond commond) { this.commond = commond; } /** * 执行命令 */ public void actionCommond() { commond.exe(); }}
Inverker类只负责接受命令和分发(actionCommond)命令到下层进行具体实现
DelCodeCommond具体命令
package patterncommond;public class DeleCodeCommond extends Commond { @Override void exe() { super.coder.find(); super.coder.del(); super.coder.plan(); }}
具体的一条命令,del 一行代码,Abstract Commond类中存储了具体人员的引用,包括 MG,CODER …,删除代码是Coder做的,那么在具体的命令封装类中调用相应的人员进行操作即可
Coder(代码工,哈哈)
package patterncommond;public class Coder extends Group { @Override void add() { System.out.println("增加功能"); } @Override void find() { System.out.println("找到 coder"); } @Override void del() { System.out.println("del功能"); } @Override void modify() { System.out.println("modify功能"); } @Override void plan() { System.out.println("变更报告清单"); }}
Coder就是现实中的编程人员,进行具体的操作
MG(美工)
package patterncommond;public class MG extends Group { @Override void add() { System.out.println("MG add功能 "); } @Override void find() { System.out.println("找到 MG 组 "); } @Override void del() { System.out.println("MG del功能"); } @Override void modify() { System.out.println("MG modify功能"); } @Override void plan() { System.out.println("变更报告清单"); }}
MG就是现实中的编美工,ui设计,进行具体的操作
unDoCodeCommond
package patterncommond;public class UnDoCodeCommond extends Commond { @Override void exe() { System.out.println("撤销不做"); }}
撤销不做了,当然这里只是简单的比较,同样客户也可以下一个需要MG和 Coder配合命令,当然现实中就是协同工作
Eg:更新ui的同时coder也需要更新
@overidePublic void exe(){ super.coder.find(); super.coder.del(); super.coder.plan(); super.mg.find(); super.mg.modify(); super.mg.plan();}
执行结果
找到 coder
del功能
变更报告清单
找到 MG
Modify 功能
变更报告清单
命令行通用类图
总结:在这个类图中,我们看到三个角色:
Receiver 角色:这个就是干活的角色,命令传递到这里是应该被执行的,具体到上面我们的例子中就是
Group 的三个实现类;
Command 角色:就是命令,需要我执行的所有命令都这里声明;
Invoker 角色:调用者,接收到命令,并执行命令,例子中我这里项目经理就是这个角色;
命令模式比较简单,但是在项目中使用是非常频繁的,封装性非常好,因为它把请求方( Invoker)和执
行方( Receiver)分开了,扩展性也有很好的保障。但是,命令模式也是有缺点的,你看 Command 的子类没
demo 下载: http://pan.baidu.com/s/1miDLdG0
引用:23种设计模式 作者 cbf4Life
- 23种设计模式之_命令行模式
- 23种设计模式之_构建者模式
- 23种设计模式之_享元模式
- 23种设计模式之_解释器模式
- 23种设计模式之_组合模式
- 23种设计模式_装饰模式
- 设计模式之_模版设计模式
- 设计模式之(Command)命令行模式
- 设计模式之命令行模式(Command)
- 23中设计模式之_状态模式
- 设计模式之_单例模式
- 设计模式_之代理模式
- 大话设计模式之_工厂模式
- 设计模式之_组合模式(下)
- 设计模式之_单例模式
- IOS设计模式第十篇之命令行设计模式
- 23种Java设计模式_单例模式_1
- java设计模式23_策略模式
- boneCP的连接管理
- 程序员必读书单
- iOS开发之Notification与多线程
- Memcache运行状况
- ACM 粗心永远AC不了系列——UVA 512
- 23种设计模式之_命令行模式
- Android命令行/c语言/java设置获取系统属性(getprop/setprop)的方法
- 配置dubbo-admin的管理页面
- [C++]类成员冒号初始化以及构造函数内赋值
- Android自定义圆角Dialog
- jQuery EasyUI详解-EasyUI表单 文本框 按钮
- 计算机领域经典巨著TAOCP卷3上市!【含赠书】
- C 语言--sizeof与typedef
- ScrollView和listView嵌套出现的问题