| 一、 策略(Strategy)模式策略模式的用意是針對一組算法,將每一個算法封裝到具有共同接口的獨立的類中,從而使得它們可以相互替換。策略模式使得算法可以在不影響到客戶端的情況下發(fā)生變化。 假設(shè)現(xiàn)在要設(shè)計一個販賣各類書籍的電子商務(wù)網(wǎng)站的購物車(Shopping Cat)系統(tǒng)。一個最簡單的情況就是把所有貨品的單價乘上數(shù)量,但是實際情況肯定比這要復雜。比如,本網(wǎng)站可能對所有的教材類圖書實行每本一元的折扣;對 連環(huán)畫類圖書提供每本7%的促銷折扣,而對非教材類的計算機圖書有3%的折扣;對其余的圖書沒有折扣。由于有這樣復雜的折扣算法,使得價格計算問題需要系 統(tǒng)地解決。 使用策略模式可以把行為和環(huán)境分割開來。環(huán)境類負責維持和查詢行為類,各種算法則在具體策略類(ConcreteStrategy)中提供。由于算 法和環(huán)境獨立開來,算法的增減、修改都不會影響環(huán)境和客戶端。當出現(xiàn)新的促銷折扣或現(xiàn)有的折扣政策出現(xiàn)變化時,只需要實現(xiàn)新的策略類,并在客戶端登記即 可。策略模式相當于"可插入式(Pluggable)的算法"。 二、 策略模式的結(jié)構(gòu)策略模式是對算法的包裝,是把使用算法的責任和算法本身分割開,委派給不同的對象管理。策略模式通常把一個系列的算法包裝到一系列的策略類里面,作為一個抽象策略類的子類。用一句話來說,就是:"準備一組算法,并將每一個算法封裝起來,使得它們可以互換。" 策略又稱做政策(Policy)模式【GOF95】。下面是一個示意性的策略模式結(jié)構(gòu)圖:   這個模式涉及到三個角色: 
 
 | 
|  | 
來自: 漂在北方的狼 > 《設(shè)計模式》