- 浏览: 309360 次
- 性别:
- 来自: 大连
文章分类
- 全部博客 (272)
- java (42)
- c (49)
- 算法 (29)
- 汇编语言 (3)
- 字符集 (3)
- error (3)
- 搜索引擎 (2)
- 互联网 (18)
- linux (12)
- 网络 (20)
- VMWare (1)
- 面试 (7)
- c++ (55)
- 设计模式 (3)
- db (9)
- office (2)
- FS (1)
- rest (3)
- Ajax (2)
- Spring (2)
- Hibernate (3)
- matlab (1)
- load balancing (8)
- 分布式计算 (2)
- 易语言 (1)
- apache tomcat (1)
- 测试 (1)
- 数据结构 (5)
- 数学 (13)
- 服务器 (9)
- 读后感 (4)
- 好书介绍 (1)
- script (3)
- wordpress (2)
- delphi (21)
- pascal (8)
- xml (3)
- 趣味 (1)
- PHP (3)
- python (13)
- DLL (4)
- openGL (8)
- windows (2)
- QT (28)
- django (7)
- jquery (1)
- 数据挖掘 (7)
- nginx (1)
- js (1)
- mac (1)
- hadoop (3)
- 项目管理 (1)
- 推荐系统 (1)
- html (1)
最新评论
-
晴天1234:
related remove:attention.ibus和u ...
UBUNTU的默认root密码是多少,修改root密码 -
美丽的小岛:
美丽的小岛 写道如上配置好就得了。提示没有OpenGl.dll ...
OpenGL学习入门之VS2010环境配置 [转] -
美丽的小岛:
如上配置好就得了。提示没有OpenGl.dll之类的,再增加入 ...
OpenGL学习入门之VS2010环境配置 [转] -
美丽的小岛:
主要是理清哪两个对象之间的关系,是信号与所有槽的关系或者是槽与 ...
QT之DisConnect -
美丽的小岛:
LPCTSTR类型:L表示long指针 这是为了兼容Windo ...
QString与各种字符串之间的转化
一般的情况下,我们人与人(或者物与物)交流都是直接沟通。
但是,觉得这样的依赖性实现在太强的,想改变一下模式,不过,也这个也是合乎基本规律的。
构造了如下图:
好了,这个抽象的行为就是我们所要求的,而对于这个能满足我们要求的行为实现者是谁,我们不想去知道,我们能达到我们目的就得了。呵呵。
好的,引入命令模式!
定义:把一个请求或者操作封装在命令对象中。命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。
结构:
Invoker类:被客户端调用,可以接受命令请求,设计命令队列,决定是否相应该请求,记录或撤销或重做命令请求,记录日志等等
Command类(一般都是Interface):将一个请求封装成一个对象,将一个请求具体化,方便对请求记录。
ConcreteCommand类,可以将Receiver对象放到这个类里面,这个类具体实现了要怎么处理这个用户的请求。
Receiver类,其实这个类可以没有,不过为了让设计看起来更整洁清楚。
如果一个系统要将系统中所有的数据更新到日志里,以便在系统崩溃时,可以根据日志里读回所有的数据更新命令,重新调用Execute()方法一条一条执行这些命令,从而恢复系统在崩溃前所做的数据更新。
很形象的例子:
对于这个服务员厨师的例子比较好的了。其实在生活上,例子到处都是,发生在身边的事情就很好。举个例子去说明一下。
成立一个大学生研究工作室,导师给某同学选成负责人,叫他L主任,L主任被委以重任说:“这个工作室就交给你了,发挥自己的主观能动性,一定要把这个实验室搞起来。”导师考虑得很周到,为了工作室的日常记录,安排了一个秘书,叫Z秘书。工作室分为很多个部门,有专门负责老师上课,这个专门做上课课件的,叫PPT部门,负责人A部长。有平时负责学生在线辅导测试的,叫test部门,负责人B部长,假设暂时列举这两个部门。
某日,导师有指示了,跟L主任说,现在要改革,重做PPT,另外,为了推进教育改革,增加信心,加强对学生的测试与促进学生学习的积极性。L主任接到任务后,准备下达命令让各个部门去实施!好了,这个命令下达得去用点技巧了,L主任不想像导师那样,直接命令,可能效果不是很太好,L主任想到了Z秘书。L主任把要做的事情都吩咐给Z秘书,让秘书去完成,最后还说了一句:“Z秘书呀,你要盯住他们呀,一定要让他们做完,每天都要去督促他们。”Z秘书虽然心中觉得有点不情愿,但还是答应了。
分析:
导师与L主任是直接沟通;
L主任下达命令:
进一步看看L主任的情况:
用面向对象的想法去想想,一切皆是对象,好的,那些命令也是对象,那些人也是对象。想想对于秘书还行增加一些方法,如果L主任改主意了,她不要去做这些事情了。
好啦!接下来不是逻辑来的了,用计算去模拟一下这个过程吧。用java实现。 显示结果:Command.java
package test.Gof.command;
public interface Command {
void excute() ;
}
PPTCommand.java
package test.Gof.command;
public class PPTCommand implements Command {
private A a = null;
public PPTCommand(A a) {
this.a = a ;
}
public void excute() {
System.out.println(a.getName()+" will go to "+"make PPT!! ");
}
}
TestCommand.java
package test.Gof.command;
public class TestCommand implements Command {
private B b = null;
public TestCommand(B b) {
this.b = b;
}
public void excute() {
System.out.println(b.getName() + " will go to " + "test!! ");
}
}
A.java
package test.Gof.command;
public class A {
private String name = "A-department";
public A() {
}
public A(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
B.java
package test.Gof.command;
public class B {
private String name = "B-department";
public B() {
}
public B(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
SecretaryZ.java
package test.Gof.command;
import java.util.ArrayList;
import java.util.List;
public class SecretaryZ {
List<Command> record = new ArrayList<Command>();
public SecretaryZ add(Command com){
record.add(com) ;
return this ;
}
public void notifyCom() {
for (Command com : record) {
com.excute();
}
}
public void undo(Command command) {
record.remove(command);
}
public void redo(Command command) {
notifyCom();
}
}
LDirector.java
package test.Gof.command;
public class LDirector {
public static void main(String[] args) {
A a = new A() ;
B b = new B() ;
Command com1 = new PPTCommand(a) ;
Command com2 = new TestCommand(b) ;
SecretaryZ secretary = new SecretaryZ() ;
secretary.add(com1).add(com2).notifyCom() ;
}
}
A-department will go to make PPT!!
B-department will go to test!!
发表评论
-
推荐!国外程序员整理的Java资源大全
2015-12-15 10:14 670本文由 ImportNew - 唐 ... -
jsoup select 选择器
2015-12-09 14:03 985问题 采用CSS或类似jquery 选择器(selecto ... -
xmlbeans问题(深刻)
2015-11-12 23:08 1192运行scomp,路径永远是一个问题; 1.Program ... -
spring配置一个简单的数据连接池(dbcp)
2015-11-12 14:16 8251.文件结构 2.包结构 3.spring.x ... -
java泛型之通配符的使用
2015-11-12 12:15 713转自: http://blog.csdn.net/lone ... -
Ubuntu下安装JDK
2015-05-02 18:42 560安装JDK: 1.下载 http://www ... -
Delphi开发DLL,Java调用DLL
2014-01-01 16:40 1327用一个小例子来示范一下,不写文件字。 第一步 第二步, ... -
如何在Java中调用DLL方法<转>
2013-12-30 13:36 723Java语言本 ... -
Java对存储过程的调用方法
2013-05-14 09:29 800//一:Java如何实现对存储过程的调用: // A ... -
谈谈对象和XML文件的转换 <转>
2013-04-12 14:18 1052很多时候,我们开发 ... -
详解Java解析XML的四种方法<转>
2013-04-12 14:01 978XML现在已经成为一种通用的数据交换格式,它的平台无关性, ... -
URLClassLoader例子
2012-11-22 15:22 1407学着写一个servlet服务器,里面对servlet的处理就得 ... -
关于JAVA配置文件的小记录
2012-11-20 15:16 1009配置文件一般会为编写编程提供方便与灵活的特点,最近看tomca ... -
关于Channel学习
2012-10-07 15:12 1122java的新I/O流,有点意思,看看相关的类,其实就这几个就能 ... -
Buffer类与ByteBuffer类(来自JDK)
2012-10-07 10:10 12451. 类 Buffer(public abst ... -
运行控制台命令(java)
2012-10-07 08:30 2919有时候我们想用java去调用系统的命令实现一些功能,这个功能 ... -
匿名内部类是怎么回事
2012-10-05 13:12 1099匿名内部类真的很神秘的,不过,这种类就喜欢做一些神秘的东西。想 ... -
内部类链接到外部类
2012-10-05 10:45 739java中的内部类可以无条件地使用外部类的资源,这是怎么一回事 ... -
关于对象初始(java)
2012-10-04 20:31 1120有时,对JAVA实例化的顺序会忘记,现在记录一下。 1.调用 ... -
关于static的一些思考(java)
2012-10-04 19:07 1674当有时候回忆JAVA的基础的时候,有些东西一下子会变 ...
相关推荐
命令模式是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。在Java编程中,命令模式是一种非常实用的设计模式,它能帮助我们...
命令模式是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。在本例中,我们将通过模仿遥控器来理解命令模式的应用。 遥控器...
现实生活中命令模式无处不在,比如我们去餐厅吃饭,服务员记录我们想要的食物的名称,然后放到后台,过一会厨师拿到订就可以烹饪食物了。而命令模式所发挥的作用就是把客户想要的食物而发出的命令(也就是订单)进行...
命令模式是一种行为型设计模式,它将一个请求封装为一个对象,从而使你可用不同的请求把客户端参数化;对请求排队或记录请求日志,以及支持可撤销的操作。 **关键知识点**: - **基本概念**:将一个请求封装为一个...
关注对象之间的责任分配和通信,包括策略模式(Strategy)、模板方法模式(Template Method)、迭代器模式(Iterator)、观察者模式(Observer)、访问者模式(Visitor)、命令模式(Command)、备忘录模式(Memento...
6命令模式封装调用 7适配器模式与外观模式随遇模式 8模板方法模式封装算法 9选代器与组合模式管理良好的集合 10状态模式事物的状态 11代理模式控制对象访问 12复合模式模式中的模型 ...
所涉及的设计模式包括工厂模式、单例模式、建造模式、原型模式、适配器模式、桥梁模式、组合模式、装饰模式、门面模式、享元模式、代理模式、责任链模式、命令模式、解释器模式、迭代器模式、调停者模式、备忘录模式...
一共使用了建造者模式、状态模式、命令模式、策略模式、单件模式这5个设计模式。 本次课程设计是开发一款有多个面板的计算器。不仅有针对日常生活“标准型”面板、针对理工科计算的“科学型”面板、针对于编程人员...
这些模式包括但不限于单例模式(Singleton)、工厂方法模式(Factory ...命令模式(Command)、解释器模式(Interpreter)、迭代器模式(Iterator)、中介者模式(Mediator)、备忘录模式(Memento)、观察者模式、...
《新版设计模式手册[C#]》是一本深入浅出介绍设计模式的专著,它将抽象的编程概念与现实生活中的实例相结合,使读者能够轻松理解并应用这些模式。设计模式是软件开发中的一种最佳实践,它总结了在解决特定问题时,...
15. **命令模式**:GG的追求行动可以看作一个个命令,命令模式封装请求作为对象,便于参数化、队列化和撤销。 16. **迭代器模式**:GG遍历追求MM的各种方法,迭代器模式提供一种遍历集合对象的方式,而无需暴露其...
- 命令模式 #### 应用场景示例 - **单例模式**:确保一个类只有一个实例,并提供一个全局访问点。 - **观察者模式**:当对象的状态改变时通知其所有依赖者。 - **策略模式**:定义一系列算法,并将每个算法封装...
16. **命令模式**:将一个请求封装为一个对象,以便使用不同的请求、队列或者日志请求,以及支持可撤销的操作。户外活动中,命令模式可用于控制各种设备的开关或设置。 17. **解释器模式**:给定一种语言,定义其...
5. **扩展与变体**:书籍可能会讨论一些观察者模式的扩展形式,比如发布-订阅模式(Publish/Subscribe),以及它与其他设计模式(如命令模式、中介者模式)的结合使用。 6. **源码解析**:提供的源码可能包含了一些...
命令模式将请求封装为一个对象,以便使用不同的请求、队列请求、或者支持撤销操作。 15. **解释器模式(Interpreter)**:如果MM喜欢解谜,解释器模式可以用于定义语言的文法并解释这些语言。 16. **迭代器模式...
14. 命令模式:将请求封装为一个对象,以便使用不同的请求、队列请求或支持撤销/重做。在追求过程中,你可以精心设计一系列行动,逐一执行。 15. 责任链模式:让多个对象都有机会处理请求,形成一条链,避免请求的...
本文将深入探讨设计模式的概念,以及JAVA中最常见的几种设计模式——工厂模式、观察者模式、单例模式、命令模式、建造者模式、适配器模式、合成模式、桥梁模式等,同时结合清华大学学者张跃平在其著作《JAVA设计模式...
#### 第13章:现实世界中的模式——更好地生活与模式 本章将设计模式的应用带入了现实生活中的例子,展示了如何在真实的项目中应用这些模式来解决问题。通过具体案例,读者可以更好地理解设计模式的实际价值。 ###...