设计模式之命令模式
来源:互联网 发布:2016网络播放器软件 编辑:程序博客网 时间:2024/06/04 18:10
模式定义:
将来自客户端的请求传入一个对象,从而使你可用不同的请求对客户进行参数化。
用于“行为请求者”与“行为实现者”解耦,可实现二者之间的松耦合,以便适应变化。
分离变化与不变的因素。
遵循原则:
开闭原则;
最少知识原则;
适用场合:
(1)使用命令模式作为"CallBack"在面向对象系统中的替代。"CallBack"讲的便是先将
一个函数登记上,然后在以后调用此函数。
(2)需要在不同的时间指定请求、将请求排队。一个命令对象和原先的请求发出者可以有
不同的生命期。换言之,原先的请求发出者可能已经不在了,而命令对象本身仍然是活动的。
这时命令的接收者可以是在本地,也可以在网络的另外一个地址。命令对象可以在串形化之
后传送到另外一台机器上去。
(3)系统需要支持命令的撤消(undo)。命令对象可以把状态存储起来,等到客户端需要撤销
命令所产生的效果时,可以调用undo()方法,把命令所产生的效果撤销掉。命令对象还可以
提供redo()方法,以供客户端在需要时,再重新实施命令效果。
(4)如果一个系统要将系统中所有的数据更新到日志里,以便在系统崩溃时,可以根据日志里
读回所有的数据更新命令,重新调用Execute()方法一条一条执行这些命令,从而恢复系统在崩
溃前所做的数据更新。
知识扩展:
JDK中ActionListener就是命令模式。
public class Receiver {
public void readMail(String message){
System.out.println("接收到消息:" + message);
}
}
public interface IPost {
public void postMail(String message);}
public class Post implements IPost{
private Receiver receiver;
public Post(Receiver receiver) {
this.receiver = receiver;
}
@Override
public void postMail(String message) {
System.out.println("邮局将信件发送给收信人");
this.receiver.readMail(message);
}
}
public class Sender {
private IPost post;
public void setPost(IPost post) {
this.post = post;
}
public void sendMail(String message){
System.out.println("发信人寄信给收信人");
this.post.postMail(message);
}
}
测试
public class Client {
public static void main(String[] args) {
Receiver receiver = new Receiver();
IPost post = new Post(receiver);
Sender sender = new Sender();
sender.setPost(post);
sender.sendMail("你最近好嘛?我想你了");
}
}
- 设计模式之命令模式
- 设计模式之命令模式
- 设计模式之命令模式
- 设计模式之命令模式
- 设计模式之命令模式
- 设计模式之--命令模式
- 设计模式之命令模式
- 设计模式之命令模式
- 设计模式之命令模式
- 设计模式之命令模式
- 设计模式之命令模式
- 设计模式之命令模式
- 设计模式之命令模式
- 设计模式之--命令模式
- 设计模式之命令模式
- 设计模式之命令模式
- 设计模式之命令模式
- 设计模式之 命令模式
- UEditor设置上传图片值允许网络图片和本地图片的方式
- Android—ListView Item 展开动画效果
- 【Codeforces Round 335 (Div 2) A】【水题】Magic Spheres 三种类型物品兑换比例2:1.cpp
- Oracle数据库学习<四>
- Android基础:翻页控件Viewpager的使用方法,viewpager+fragment混合使用
- 设计模式之命令模式
- Tomcat和Apache的关系
- 【Codeforces Round 335 (Div 2) B】【模拟】Testing Robots 机器人逐步走 走到矿场就爆炸的最多行走步数
- 在图片上添加菊花
- animation——translation的实例
- Android学习摘记——简单的自定义View(自绘控件)
- linux打包压缩命令汇总
- 华为OJ中级题-汽水瓶
- centos下gitlab安装过程和问题