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
閱讀(336)
評論(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
主站蜘蛛池模板:
亚洲一区视频在线播放
|
老司机免费午夜精品视频
|
久久国产乱子伦精品免费午夜
|
亚洲国产系列一区二区三区
|
久久中文字幕免费视频
|
免费精品国自产拍在线播放
|
亚洲午夜精品一区二区麻豆
|
亚洲天堂一区二区三区四区
|
永久黄网站色视频免费
|
91免费人成网站在线观看18
|
久久精品亚洲综合
|
成人免费福利电影
|
一级特级aaaa毛片免费观看
|
久久国产精品亚洲一区二区
|
亚洲人成网站18禁止一区
|
日韩中文字幕在线免费观看
|
九九精品免费视频
|
免费视频爱爱太爽了
|
三年片在线观看免费观看大全动漫
|
国产VA免费精品高清在线
|
一级毛片免费全部播放
|
亚洲欧美在线x视频
|
亚洲AV无码精品国产成人
|
久久综合图区亚洲综合图区
|
中文字幕亚洲天堂
|
三年片在线观看免费观看高清电影
|
国内精品久久久久影院免费
|
亚洲男人的天堂网站
|
亚洲Av无码专区国产乱码DVD
|
a级毛片免费观看在线
|
特级aaaaaaaaa毛片免费视频
|
苍井空亚洲精品AA片在线播放
|
亚洲av永久无码精品秋霞电影秋
|
亚洲精品天堂成人片AV在线播放
|
日韩亚洲人成在线
|
亚洲爆乳AAA无码专区
|
亚洲成在人线在线播放无码
|
久久亚洲精品高潮综合色a片
|
色五月五月丁香亚洲综合网
|
狼色精品人妻在线视频免费
|
国产精品免费一区二区三区
|