pengpenglin
人,必須選擇一種生活方式并有勇氣堅(jiān)持下去
BlogJava
首頁(yè)
新隨筆
新文章
聯(lián)系
聚合
管理
posts - 262, comments - 221, trackbacks - 0
設(shè)計(jì)模式總結(jié)-Strategy模式
注:本文參考了《Java設(shè)計(jì)模式》一書(shū)和
WWW.jdon.com
網(wǎng)站的《Strategy模式》一章
一、Strategy模式的意圖:
策略操作定義了策略的輸入和輸出,而把策略的實(shí)現(xiàn)工作留給了各個(gè)類(lèi)。這些類(lèi)以不同的方案來(lái)實(shí)現(xiàn)同一操作,它們?yōu)橛脩籼峁┙y(tǒng)一的接口,因而這些類(lèi)可以相互替換。
Strategy模式允許多種策略共存,而代碼不會(huì)混亂。策略模式也可以實(shí)現(xiàn)模式選擇邏輯和策略本身相分離。
Strategy模式的意圖在于把可選的策略或方案
封裝在不同的類(lèi)中
,并在這些類(lèi)中
實(shí)現(xiàn)一個(gè)共同的操作
。
二、Strategy模式的例子:
·抽象父類(lèi):
public
abstract
class
RepTempRule
{
protected
String oldString
=
""
;
public
void
setOldString(String oldString)
{
this
.oldString
=
oldString;
}
protected
String newString
=
""
;
public
String getNewString()
{
return
newString;
}
public
abstract
void
replace()
throws
Exception;
}
·繼承子類(lèi):
public
class
RepTempRuleOne
extends
RepTempRule
{
public
void
replace()
throws
Exception
{
//
replaceFirst是jdk1.4新特性
newString
=
oldString.replaceFirst(
"
aaa
"
,
"
bbbb
"
)
System.out.println(
"
this is replace one
"
);
}
}
public
class
RepTempRuleTwo
extends
RepTempRule
{
public
void
replace()
throws
Exception
{
newString
=
oldString.replaceFirst(
"
aaa
"
,
"
ccc
"
)
System.out.println(
"
this is replace Two
"
);
}
}
·幫助類(lèi):
public
class
RepTempRuleSolve
{
//
當(dāng)前的策略
private
RepTempRule strategy;
//
初始化時(shí)指定默認(rèn)的策略
public
RepTempRuleSolve(RepTempRule rule)
{
this
.strategy
=
rule;
}
//
根據(jù)當(dāng)前策略處理用戶的請(qǐng)求
public
String getNewContext(Site site,String oldString)
{
return
strategy.replace(site,oldString);
}
//
動(dòng)態(tài)切換策略
public
void
changeAlgorithm(RepTempRule newAlgorithm)
{
strategy
=
newAlgorithm;
}
}
三、Strategy模式的特點(diǎn):
·有一個(gè)抽象的父類(lèi)/接口,在其中定義了操作的模板(類(lèi)似于Template模式)
·有一至多個(gè)實(shí)現(xiàn)類(lèi)或子類(lèi),實(shí)現(xiàn)了父類(lèi)/接口中的模板方法
·有
一個(gè)可供客戶端動(dòng)態(tài)切換算法的幫助類(lèi),該類(lèi)擁有一個(gè)策略對(duì)象,可以在初始化時(shí)指定默認(rèn)的策略,也可以在運(yùn)行時(shí)通過(guò)set方法動(dòng)態(tài)切換策略
四、Strategy模式與其它模式的比較:
·Strage模式與State模式的比較
在對(duì)狀態(tài)進(jìn)行建模時(shí),狀態(tài)的遷移是一個(gè)重要的方面(即如何切換到上、下一個(gè)狀態(tài));而在對(duì)策略進(jìn)行建模時(shí),遷移與策略的選擇并不相關(guān)
(即關(guān)注的是操作的策略,對(duì)象狀態(tài)的切換并不是關(guān)注的方面)。
另外一個(gè)不同之處就是,Strategy模式可能允許客戶選擇或者提供一個(gè)策略,而State模式卻很少設(shè)計(jì)這樣的思路。
·Strategy模式與Template模式的比較
Strategy模式的最大特點(diǎn)是可以在運(yùn)行期間動(dòng)態(tài)地切換算法。這一點(diǎn)和“Template”模式有點(diǎn)不同,后者雖然也提供抽象的模板框架,并且由子類(lèi)繼承實(shí)現(xiàn),
Template模式一般在確定之后的運(yùn)行期間就不會(huì)再次切換了。而前者可以或者說(shuō)需要在運(yùn)行期間動(dòng)態(tài)地切換
五、Strategy模式的適用場(chǎng)合:
1.以不同的格式保存文件;
2.以不同的算法壓縮文件;
3.以不同的算法截獲圖象;
4.以不同的格式輸出同樣數(shù)據(jù)的圖形,比如曲線 或框圖bar等
-------------------------------------------------------------
生活就像打牌,不是要抓一手好牌,而是要盡力打好一手爛牌。
posted on 2008-04-08 11:52
Paul Lin
閱讀(5361)
評(píng)論(2)
編輯
收藏
所屬分類(lèi):
模式與重構(gòu)
FeedBack:
#
re: 設(shè)計(jì)模式總結(jié)-Strategy模式
2008-04-13 09:23 |
applupus
幫助類(lèi)的代碼是不是有問(wèn)題?
return strategy.replace(site,oldString);
策略中的方法是replace(),是不帶參數(shù)的。
回復(fù)
更多評(píng)論
#
re: 設(shè)計(jì)模式總結(jié)-Strategy模式[未登錄](méi)
2012-04-02 13:13 |
vince
這個(gè)例子做Strategy不太合適
回復(fù)
更多評(píng)論
新用戶注冊(cè)
刷新評(píng)論列表
只有注冊(cè)用戶
登錄
后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航:
博客園
IT新聞
Chat2DB
C++博客
博問(wèn)
管理
相關(guān)文章:
設(shè)計(jì)模式總結(jié)-Visitor模式
設(shè)計(jì)模式總結(jié)-Strategy模式
設(shè)計(jì)模式總結(jié)-State模式
設(shè)計(jì)模式總結(jié)-Command模式
設(shè)計(jì)模式總結(jié)-Memento模式(二)
設(shè)計(jì)模式總結(jié)-Memento模式(一)
設(shè)計(jì)模式總結(jié)-Observer模式
設(shè)計(jì)模式總結(jié)-Flyweight模式
設(shè)計(jì)模式總結(jié)-Bridge模式
設(shè)計(jì)模式總結(jié)-Decorator模式(二)
Copyright ©2025 Paul Lin Powered by:
博客園
模板提供:
滬江博客
<
2008年4月
>
日
一
二
三
四
五
六
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
1
2
3
4
5
6
7
8
9
10
常用鏈接
我的隨筆
我的評(píng)論
我的參與
最新評(píng)論
留言簿
(21)
給我留言
查看公開(kāi)留言
查看私人留言
隨筆分類(lèi)
J2EE 框架(9)
J2EE基礎(chǔ)(4)
J2SE(43)
Java 工具(5)
Oracle Concept(4)
Oracle SQL/PLSQL(9)
Oracle 開(kāi)發(fā)(13)
Oracle 管理(4)
Oracle 調(diào)優(yōu)
Oracle 錯(cuò)誤診斷
RoR(19)
UML(3)
Unix / Linux(13)
Web基礎(chǔ)(19)
其它技術(shù)(7)
感悟(3)
雜項(xiàng)(7)
架構(gòu)與性能(8)
模式與重構(gòu)(19)
灌水(8)
電影與音樂(lè)(16)
走過(guò)的路(1)
軟件過(guò)程與軟件方法(3)
陽(yáng)光戶外(2)
項(xiàng)目管理(36)
隨筆檔案
2012年2月 (3)
2011年11月 (4)
2011年10月 (1)
2011年9月 (2)
2011年8月 (2)
2011年7月 (5)
2011年6月 (3)
2011年5月 (1)
2011年4月 (1)
2011年3月 (3)
2011年1月 (1)
2010年12月 (1)
2010年11月 (5)
2010年10月 (3)
2010年9月 (1)
2010年7月 (1)
2010年6月 (1)
2010年5月 (4)
2010年4月 (9)
2010年3月 (19)
2010年2月 (8)
2010年1月 (3)
2009年12月 (34)
2009年11月 (1)
2009年10月 (2)
2009年7月 (4)
2009年6月 (5)
2009年5月 (3)
2009年4月 (2)
2009年3月 (1)
2009年2月 (5)
2009年1月 (5)
2008年12月 (13)
2008年11月 (4)
2008年10月 (1)
2008年9月 (6)
2008年8月 (5)
2008年7月 (3)
2008年6月 (31)
2008年5月 (10)
2008年4月 (9)
2008年3月 (7)
2008年2月 (4)
2008年1月 (19)
BlogJava熱點(diǎn)博客
BeanSoft
Jack.Wang
如坐春風(fēng)
詩(shī)特林
鄭暉
銀河使者
阿密果
隔葉黃鶯
好友博客
無(wú)羽蒼鷹
搜索
最新評(píng)論
1.?re: 【Java基礎(chǔ)專(zhuān)題】編碼與亂碼(01)---編碼基礎(chǔ)[未登錄](méi)
666666666666666666666這幾天正在做個(gè)類(lèi)似工程編碼出現(xiàn)錯(cuò)誤
--李
2.?re: 【Java基礎(chǔ)專(zhuān)題】IO與文件讀寫(xiě)---使用Apache commons IO簡(jiǎn)化文件讀寫(xiě)
不錯(cuò)
--阿斯蘭
3.?re: 【Java基礎(chǔ)專(zhuān)題】編碼與亂碼(03)----String的toCharArray()方法
多謝分享
--thx
4.?re: 【Java基礎(chǔ)專(zhuān)題】編碼與亂碼(05)---GBK與UTF-8之間的轉(zhuǎn)換
評(píng)論內(nèi)容較長(zhǎng),點(diǎn)擊標(biāo)題查看
--karl
5.?re: 【Java基礎(chǔ)專(zhuān)題】編碼與亂碼(01)---編碼基礎(chǔ)[未登錄](méi)
謝謝,幫了我大忙!
--小龍
閱讀排行榜
1.?Oracle中如何插入特殊字符:& 和 ' (多種解決方案)(48446)
2.?getOutputStream() has already been called for this response的解決方法(43350)
3.?【Java基礎(chǔ)專(zhuān)題】編碼與亂碼(05)---GBK與UTF-8之間的轉(zhuǎn)換(37031)
4.?360安全衛(wèi)士誤刪audiosrv.dll文件造成系統(tǒng)無(wú)聲的解決方案(21267)
5.?Java中讀取字節(jié)流并按指定編碼轉(zhuǎn)換成字符串的方法(17318)
評(píng)論排行榜
1.?360安全衛(wèi)士誤刪audiosrv.dll文件造成系統(tǒng)無(wú)聲的解決方案(33)
2.?【原】Oracle開(kāi)發(fā)專(zhuān)題之:時(shí)間運(yùn)算(11)
3.?【Java基礎(chǔ)專(zhuān)題】編碼與亂碼(05)---GBK與UTF-8之間的轉(zhuǎn)換(11)
4.?getOutputStream() has already been called for this response的解決方法(10)
5.?【原】Oracle開(kāi)發(fā)專(zhuān)題之:分析函數(shù)(OVER)(8)
主站蜘蛛池模板:
精品国产免费观看久久久
|
a级片免费在线播放
|
无套内射无矿码免费看黄
|
eeuss影院ss奇兵免费com
|
中文字幕不卡免费高清视频
|
无码人妻一区二区三区免费视频
|
国产精品免费一区二区三区
|
国产好大好硬好爽免费不卡
|
精品福利一区二区三区免费视频
|
黄色短视频免费看
|
日韩精品无码免费专区午夜
|
无码av免费网站
|
0588影视手机免费看片
|
韩国日本好看电影免费看
|
亚洲一区视频在线播放
|
亚洲免费视频在线观看
|
伊人久久五月丁香综合中文亚洲
|
国产成人亚洲精品播放器下载
|
www免费插插视频
|
中文字幕免费观看
|
美女被免费视频网站a国产
|
国产成人免费永久播放视频平台
|
女人被男人躁的女爽免费视频
|
国产免费看插插插视频
|
人人狠狠综合久久亚洲88
|
中文字幕 亚洲 有码 在线
|
免费的黄色的网站
|
一级毛片不卡片免费观看
|
成人免费777777
|
亚洲天堂免费在线视频
|
亚洲成aⅴ人片在线观
|
黄色大片免费网站
|
7x7x7x免费在线观看
|
免费看男女下面日出水视频
|
久久久久亚洲AV无码专区体验
|
亚洲欧洲日本在线观看
|
国产一区二区三区免费观在线
|
影音先锋在线免费观看
|
亚洲国产精品无码久久一区二区
|
亚洲首页国产精品丝袜
|
成年女人A毛片免费视频
|