pengpenglin
人,必須選擇一種生活方式并有勇氣堅持下去
BlogJava
首頁
新隨筆
新文章
聯系
聚合
管理
posts - 262, comments - 221, trackbacks - 0
設計模式總結-Strategy模式
注:本文參考了《Java設計模式》一書和
WWW.jdon.com
網站的《Strategy模式》一章
一、Strategy模式的意圖:
策略操作定義了策略的輸入和輸出,而把策略的實現工作留給了各個類。這些類以不同的方案來實現同一操作,它們為用戶提供統一的接口,因而這些類可以相互替換。
Strategy模式允許多種策略共存,而代碼不會混亂。策略模式也可以實現模式選擇邏輯和策略本身相分離。
Strategy模式的意圖在于把可選的策略或方案
封裝在不同的類中
,并在這些類中
實現一個共同的操作
。
二、Strategy模式的例子:
·抽象父類:
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;
}
·繼承子類:
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
"
);
}
}
·幫助類:
public
class
RepTempRuleSolve
{
//
當前的策略
private
RepTempRule strategy;
//
初始化時指定默認的策略
public
RepTempRuleSolve(RepTempRule rule)
{
this
.strategy
=
rule;
}
//
根據當前策略處理用戶的請求
public
String getNewContext(Site site,String oldString)
{
return
strategy.replace(site,oldString);
}
//
動態切換策略
public
void
changeAlgorithm(RepTempRule newAlgorithm)
{
strategy
=
newAlgorithm;
}
}
三、Strategy模式的特點:
·有一個抽象的父類/接口,在其中定義了操作的模板(類似于Template模式)
·有一至多個實現類或子類,實現了父類/接口中的模板方法
·有
一個可供客戶端動態切換算法的幫助類,該類擁有一個策略對象,可以在初始化時指定默認的策略,也可以在運行時通過set方法動態切換策略
四、Strategy模式與其它模式的比較:
·Strage模式與State模式的比較
在對狀態進行建模時,狀態的遷移是一個重要的方面(即如何切換到上、下一個狀態);而在對策略進行建模時,遷移與策略的選擇并不相關
(即關注的是操作的策略,對象狀態的切換并不是關注的方面)。
另外一個不同之處就是,Strategy模式可能允許客戶選擇或者提供一個策略,而State模式卻很少設計這樣的思路。
·Strategy模式與Template模式的比較
Strategy模式的最大特點是可以在運行期間動態地切換算法。這一點和“Template”模式有點不同,后者雖然也提供抽象的模板框架,并且由子類繼承實現,
Template模式一般在確定之后的運行期間就不會再次切換了。而前者可以或者說需要在運行期間動態地切換
五、Strategy模式的適用場合:
1.以不同的格式保存文件;
2.以不同的算法壓縮文件;
3.以不同的算法截獲圖象;
4.以不同的格式輸出同樣數據的圖形,比如曲線 或框圖bar等
-------------------------------------------------------------
生活就像打牌,不是要抓一手好牌,而是要盡力打好一手爛牌。
posted on 2008-04-08 11:52
Paul Lin
閱讀(5361)
評論(2)
編輯
收藏
所屬分類:
模式與重構
FeedBack:
#
re: 設計模式總結-Strategy模式
2008-04-13 09:23 |
applupus
幫助類的代碼是不是有問題?
return strategy.replace(site,oldString);
策略中的方法是replace(),是不帶參數的。
回復
更多評論
#
re: 設計模式總結-Strategy模式[未登錄]
2012-04-02 13:13 |
vince
這個例子做Strategy不太合適
回復
更多評論
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
網站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
相關文章:
設計模式總結-Visitor模式
設計模式總結-Strategy模式
設計模式總結-State模式
設計模式總結-Command模式
設計模式總結-Memento模式(二)
設計模式總結-Memento模式(一)
設計模式總結-Observer模式
設計模式總結-Flyweight模式
設計模式總結-Bridge模式
設計模式總結-Decorator模式(二)
Copyright ©2025 Paul Lin Powered by:
博客園
模板提供:
滬江博客
<
2012年4月
>
日
一
二
三
四
五
六
25
26
27
28
29
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
常用鏈接
我的隨筆
我的評論
我的參與
最新評論
留言簿
(21)
給我留言
查看公開留言
查看私人留言
隨筆分類
J2EE 框架(9)
J2EE基礎(4)
J2SE(43)
Java 工具(5)
Oracle Concept(4)
Oracle SQL/PLSQL(9)
Oracle 開發(13)
Oracle 管理(4)
Oracle 調優
Oracle 錯誤診斷
RoR(19)
UML(3)
Unix / Linux(13)
Web基礎(19)
其它技術(7)
感悟(3)
雜項(7)
架構與性能(8)
模式與重構(19)
灌水(8)
電影與音樂(16)
走過的路(1)
軟件過程與軟件方法(3)
陽光戶外(2)
項目管理(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熱點博客
BeanSoft
Jack.Wang
如坐春風
詩特林
鄭暉
銀河使者
阿密果
隔葉黃鶯
好友博客
無羽蒼鷹
搜索
最新評論
1.?re: 【Java基礎專題】編碼與亂碼(01)---編碼基礎[未登錄]
666666666666666666666這幾天正在做個類似工程編碼出現錯誤
--李
2.?re: 【Java基礎專題】IO與文件讀寫---使用Apache commons IO簡化文件讀寫
不錯
--阿斯蘭
3.?re: 【Java基礎專題】編碼與亂碼(03)----String的toCharArray()方法
多謝分享
--thx
4.?re: 【Java基礎專題】編碼與亂碼(05)---GBK與UTF-8之間的轉換
評論內容較長,點擊標題查看
--karl
5.?re: 【Java基礎專題】編碼與亂碼(01)---編碼基礎[未登錄]
謝謝,幫了我大忙!
--小龍
閱讀排行榜
1.?Oracle中如何插入特殊字符:& 和 ' (多種解決方案)(48446)
2.?getOutputStream() has already been called for this response的解決方法(43350)
3.?【Java基礎專題】編碼與亂碼(05)---GBK與UTF-8之間的轉換(37031)
4.?360安全衛士誤刪audiosrv.dll文件造成系統無聲的解決方案(21268)
5.?Java中讀取字節流并按指定編碼轉換成字符串的方法(17319)
評論排行榜
1.?360安全衛士誤刪audiosrv.dll文件造成系統無聲的解決方案(33)
2.?【原】Oracle開發專題之:時間運算(11)
3.?【Java基礎專題】編碼與亂碼(05)---GBK與UTF-8之間的轉換(11)
4.?getOutputStream() has already been called for this response的解決方法(10)
5.?【原】Oracle開發專題之:分析函數(OVER)(8)
主站蜘蛛池模板:
精品国产日韩亚洲一区在线
|
亚洲真人无码永久在线
|
777亚洲精品乱码久久久久久
|
黄桃AV无码免费一区二区三区
|
天堂亚洲免费视频
|
一级特黄录像免费播放中文版
|
亚洲av日韩av欧v在线天堂
|
国产AV日韩A∨亚洲AV电影
|
亚洲国产日韩成人综合天堂
|
sss日本免费完整版在线观看
|
中文字幕亚洲一区
|
日本中文字幕免费高清视频
|
亚洲人成在线电影
|
在线观看H网址免费入口
|
亚洲久悠悠色悠在线播放
|
四虎成人免费影院网址
|
免费无码国产V片在线观看
|
国产亚洲大尺度无码无码专线
|
免费播放在线日本感人片
|
久久精品国产亚洲av麻豆小说
|
在线永久看片免费的视频
|
亚洲精华液一二三产区
|
亚洲国产成人精品91久久久
|
国产午夜不卡AV免费
|
亚洲第一区视频在线观看
|
情侣视频精品免费的国产
|
中文字幕免费在线看
|
亚洲国产精品网站久久
|
国产成人免费全部网站
|
a级在线观看免费
|
亚洲妇女熟BBW
|
亚洲欧洲日产国码无码网站
|
亚洲黄色免费在线观看
|
污视频网站免费观看
|
亚洲综合自拍成人
|
成人永久免费高清
|
免费A级毛片无码专区
|
欧美激情综合亚洲一二区
|
久久久久亚洲AV无码专区首
|
性感美女视频在线观看免费精品
|
国产大片免费天天看
|