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
閱讀(340)
評論(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構造課程學習網站
誰能給個汽修學習網站!
--..
Powered by:
博客園
模板提供:
滬江博客
Copyright ©2025 gooogle
主站蜘蛛池模板:
亚洲欧洲日韩综合
|
亚洲精品不卡视频
|
台湾一级毛片永久免费
|
亚洲av无码国产精品夜色午夜
|
黄色网址免费在线观看
|
亚洲精品无码永久在线观看
|
免费无码午夜福利片
|
国产a v无码专区亚洲av
|
一区二区三区免费视频播放器
|
亚洲天堂在线视频
|
成人免费无码H在线观看不卡
|
自拍偷自拍亚洲精品第1页
|
女人隐私秘视频黄www免费
|
亚洲AV无码专区国产乱码电影
|
一个人免费日韩不卡视频
|
亚洲天堂一区二区三区四区
|
成年大片免费视频
|
老司机午夜在线视频免费观
|
亚洲高清免费视频
|
无码人妻精品中文字幕免费
|
亚洲第一网站免费视频
|
在线观看免费高清视频
|
国产亚洲高清在线精品不卡
|
精品国产人成亚洲区
|
18pao国产成视频永久免费
|
亚洲毛片不卡av在线播放一区
|
国产男女爽爽爽免费视频
|
亚洲高清视频免费
|
日韩免费a级在线观看
|
一道本不卡免费视频
|
亚洲国产精品一区
|
国产免费A∨在线播放
|
亚洲AV无码成人专区片在线观看
|
国产成人精品免费视频动漫
|
日本免费电影一区
|
午夜在线免费视频
|
亚洲欧洲中文日韩久久AV乱码
|
免费无码又爽又刺激网站直播
|
亚洲成年人免费网站
|
国产yw855.c免费视频
|
日韩免费在线视频
|