设计模式----命令模式UML和实现代码
2015-12-10 00:00
155 查看
摘要: 命令模式(Command) 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数 化;对请求排队和日志,以及支持可撤销的操作。
类型:形为型模式
顺口溜:中访策备迭 观模命状职解
类型:形为型模式
顺口溜:中访策备迭 观模命状职解
2).新的命令可以很容易地加入到系统中。
3).可以比较容易地设计一个组合命令。
4).调用同一方法实现不同的功能
类型:形为型模式
顺口溜:中访策备迭 观模命状职解
一、什么是命令模式?
命令模式(Command) 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数 化;对请求排队和日志,以及支持可撤销的操作。类型:形为型模式
顺口溜:中访策备迭 观模命状职解
二、命令模式UML
三、JAVA代码实现
package com.amosli.dp.behavior.command; public abstract class Command { protected Receiver invoker; public Command(Receiver invoker) { this.invoker = invoker; } public abstract void execute(); } package com.amosli.dp.behavior.command; public class ConcreteCommand extends Command { public ConcreteCommand(Receiver invoker) { super(invoker); } @Override public void execute() { invoker.action(); } } package com.amosli.dp.behavior.command; import java.util.ArrayList; import java.util.List; public class Invoker { private List<Command> commands = new ArrayList<Command>(); public void add(Command command){ commands.add(command); } public void remove(Command command){ commands.remove(command); } public void inform(){ for (Command command : commands) { command.execute(); } } } package com.amosli.dp.behavior.command; public class Receiver { public void action(){ System.out.println("执行了这个操作。"); } }
四、使用场景
1.系统需要将请求调用者和请求接收者解耦,使得调用者和接收者不直接交互。
2.系统需要在不同的时间指定请求、将请求排队和执行请求。
3.系统需要支持命令的撤销(Undo)操作和恢复(Redo)操作。
4.系统需要将一组操作组合在一起,即支持宏命令。
五、优缺点
1、优点
1).降低对象之间的耦合度。2).新的命令可以很容易地加入到系统中。
3).可以比较容易地设计一个组合命令。
4).调用同一方法实现不同的功能
2、缺点
使用命令模式可能会导致某些系统有过多的具体命令类。因为针对每一个命令都需要设计一个具体命令类,因此某些系统可能需要大量具体命令类,这将影响命令模式的使用。六、源码地址
本系列文章源码地址,https://github.com/amosli/dp 欢迎Fork & Star !!相关文章推荐
- PropertyChangeListener简单理解
- 什么是设计模式
- 设计模式之创建型模式 - 特别的变量问题
- UML类图中的六种关系
- 七、设计模式——装饰模式
- 设计模式总结
- 设计模式之创建型模式
- 浅谈设计模式的学习
- PHP设计模式之装饰者模式代码实例
- php设计模式之单例模式实例分析
- 介绍php设计模式中的工厂模式
- PHP设计模式之适配器模式代码实例
- 深入浅出23种设计模式
- 浅谈c#设计模式之单一原则
- C#设计模式之观察者模式实例讲解
- C#设计模式之单例模式实例讲解
- 学习JavaScript设计模式(接口)
- 深入理解JavaScript系列(28):设计模式之工厂模式详解
- 面向对象设计模式的核心法则
- JavaScript设计模式之单件模式介绍