flying
既然选择了远方,只有风雨兼程
BlogJava
|
首页
| |
发新文章
|
联系
|
聚合
|
管理
设计模式学习笔记(十五)--------命令(Command)模式
命令模式:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。
所涉及的角色:
1.客户(Client)角色:
创建一个具体对象及其确定接收者.
2.命令(Command)角色:
声明了一个给所有具体命令类的抽象接口。
3.具体命令(ConcreteCommand)角色:
定义一个接收者与行为之间的弱耦合,实现exceute()方法,负责调用接收者的相应操作
。
4.请求者(Invoker)角色:
负责调用命令对象执行请求。
5.接收者(Recevice)角色:
负责具体实施与执行一个请求。
优点:
解耦了发送者和接受者之间联系。 发送者调用一个操作,接受者接受请求执行相应的动作,因为使用Command模式解耦,发送者无需知道接受者任何接口。
命令模式创建的一般步骤
:
1.客户端创建一个ConcreteCommand对象,并指明接收者。
2.请求对象保持ConcreteCommand对象。
3.请求对象通过调用action方法发出请求,若命令是可撤消,则ConcreteCommand保存execute()方法执行前的状态。
4.ConcreteCommand对象调用接收的方法执行请求。
一个简单例子:
抽象命令接口:
package
command;
public
interface
Command
{
//
执行方法
void
execute();
}
具体命令
package
command;
public
class
ConcreteCommand
implements
Command
{
//
接收者
private
Receiver receiver;
//
构造方法
public
ConcreteCommand(Receiver receiver)
{
this
.receiver
=
receiver;
}
//
执行方法
public
void
execute()
{
receiver.action();
}
}
接收者:
package
command;
public
class
Receiver
{
//
构造方法
public
Receiver()
{}
;
//
行为方法
public
void
action()
{
System.out.println(
"
Action is taken here
"
);
}
}
请求者:
package
command;
public
class
Invoker
{
//
命令
private
Command command;
//
构造方法
public
Invoker(Command command)
{
this
.command
=
command;
}
//
行为方法
public
void
action()
{
command.execute();
}
}
客户端:
package
command;
public
class
Client
{
public
static
void
main(String[] args)
{
Receiver receiver
=
new
Receiver();
Command concreteCommand
=
new
ConcreteCommand(receiver);
Invoker invoker
=
new
Invoker(concreteCommand);
invoker.action();
}
}
命令模式与责任链模式区别:
责任链模式使一个特定的请求接收对象对请求与命令的执行变得不确定性.而命令模式使得一个特定的对象对命令的执行变得明显与确定.
参考资料:《Java与模式》
http://www.jdon.com/designpatterns/command.htm
发表于 2006-08-15 21:45
gooogle
阅读(335)
评论(0)
编辑
收藏
所属分类:
设计模式
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
Chat2DB
C++博客
博问
管理
相关文章:
设计模式学习总结
设计模式学习笔记(二十四)--------访问者(Visitor)模式
设计模式学习笔记(二十三)--------策略(Strategy)模式
设计模式学习笔记(二十二)----------模板方法 (Template Method)模式
设计模式学习笔记(二十一)--------备忘录( Memento)模式
设计模式学习笔记(二十)--------状态(State) 模式
设计模式学习笔记(十九)--------观察者(Observer)模式
设计模式学习笔记(十八)---------中介(Mediator)模式
设计模式学习笔记(十七)----------迭代器(Iterator)模式
设计模式学习笔记(十六)---------解释器(Interpreter)模式
<
2006年8月
>
日
一
二
三
四
五
六
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
留言簿
(2)
给我留言
查看公开留言
查看私人留言
搜索
最新随笔
1. struts2 客户端验证
2. Struts2整合Spring
3. Java动态代理的一个例子
4. Struts2的拦截器
5. Struts2文件的上传
6. 在D630上安装了Ubuntu 8.04.1
7. struts2类型转换
8. 用moodle构造课程学习网站
9. java虚拟机常用参数详解
10. 初试Java RMI
最新评论
1. 111
111
--11
2. re: 在struts2中利用ajax进行服务器验证[未登录]
啊啊
--啊
3. re: 在struts2中利用ajax进行服务器验证[未登录]
谢谢你了。。。。。。
--皮皮
4. re: struts2 客户端验证
为什么会抛出异常???
--永恒的兴
5. re: 用moodle构造课程学习网站
谁能给个汽修学习网站!
--..