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
閱讀(5360)
評論(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:
博客園
模板提供:
滬江博客
<
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
常用鏈接
我的隨筆
我的評論
我的參與
最新評論
留言簿
(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中如何插入特殊字符:& 和 ' (多種解決方案)(48445)
2.?getOutputStream() has already been called for this response的解決方法(43350)
3.?【Java基礎專題】編碼與亂碼(05)---GBK與UTF-8之間的轉換(37031)
4.?360安全衛士誤刪audiosrv.dll文件造成系統無聲的解決方案(21267)
5.?Java中讀取字節流并按指定編碼轉換成字符串的方法(17318)
評論排行榜
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)
主站蜘蛛池模板:
很黄很黄的网站免费的
|
国产免费131美女视频
|
麻花传媒剧在线mv免费观看
|
美女视频黄是免费的网址
|
国产V亚洲V天堂无码久久久
|
国产一级婬片A视频免费观看
|
国产成人精品日本亚洲专区
|
精品国产免费观看久久久
|
亚洲av无码不卡久久
|
无码人妻精品一二三区免费
|
亚洲熟妇成人精品一区
|
日韩免费高清视频网站
|
亚洲综合精品香蕉久久网97
|
亚洲AV无码专区在线厂
|
嫩草在线视频www免费观看
|
精品久久免费视频
|
久久亚洲中文无码咪咪爱
|
亚洲精品国产免费
|
亚洲日本va在线观看
|
精品亚洲永久免费精品
|
免费观看亚洲人成网站
|
丰满少妇作爱视频免费观看
|
亚洲日韩v无码中文字幕
|
日韩电影免费观看
|
亚洲免费在线观看视频
|
91久久青青草原线免费
|
亚洲av综合av一区
|
1000部夫妻午夜免费
|
99亚洲精品卡2卡三卡4卡2卡
|
久久久久亚洲爆乳少妇无
|
日本卡1卡2卡三卡免费
|
亚洲综合精品伊人久久
|
亚洲国产精品成人
|
美女视频黄.免费网址
|
欧洲亚洲国产清在高
|
韩国免费一级成人毛片
|
h视频在线免费观看
|
91嫩草私人成人亚洲影院
|
久久国产乱子伦精品免费看
|
亚洲欧洲日产国码久在线
|
中文字幕亚洲日本岛国片
|