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)
主站蜘蛛池模板:
老司机午夜在线视频免费观
|
国产视频精品免费
|
国产精品区免费视频
|
免费一级不卡毛片
|
福利免费观看午夜体检区
|
日韩a在线观看免费观看
|
亚洲乱码一区二区三区在线观看
|
久香草视频在线观看免费
|
免费看黄的成人APP
|
成人免费大片免费观看网站
|
18禁成年无码免费网站无遮挡
|
久久精品国产亚洲AV麻豆~
|
亚洲无码精品浪潮
|
亚洲综合在线视频
|
亚洲色大成网站www久久九
|
激情无码亚洲一区二区三区
|
五级黄18以上免费看
|
9久9久女女免费精品视频在线观看
|
亚洲综合久久精品无码色欲
|
花蝴蝶免费视频在线观看高清版
|
亚洲成AV人片在线观看无
|
福利片免费一区二区三区
|
日韩精品无码区免费专区
|
相泽南亚洲一区二区在线播放
|
久久久久亚洲?V成人无码
|
亚洲日本VA午夜在线电影
|
永久在线免费观看
|
国产亚洲精品久久久久秋霞
|
中文字幕精品亚洲无线码一区
|
免费在线看黄的网站
|
亚洲一区免费在线观看
|
日本一区午夜艳熟免费
|
国产精品亚洲片夜色在线
|
黄+色+性+人免费
|
黄页免费视频播放在线播放
|
亚洲一区二区三区香蕉
|
精品国产免费一区二区三区
|
四虎免费影院4hu永久免费
|
日韩亚洲国产高清免费视频
|
亚洲人成电影在线播放
|
男女污污污超污视频免费在线看
|