策略模式一般用於封裝系列演算法或系情況而定選取某種方式進行處理,通常被封裝在稱為context的類中,客戶端可以自由的選取其中一種演算法或處理方式。
場景:正在開發乙個網上書店,需要進行各種**,那麼就需要各種打折的計算方法。
採用原始方式:
public double discount(double price)
}
從功能角度上,實現了根據打折型別類使用不同打折演算法,但是將所有的打折演算法均寫入了discount方法中,當某天需要增加一種打折型別時,需要改動的地方至少是三處:打折型別,case,實現打折方法;在此可考慮使用策略模式來優化:
1.編寫乙個打折演算法的介面:
public inte***ce discountstrategy
2.實現倆個打折演算法的實現類:
public class vipdiscount
implements discountstrategy
}
public class olddiscount
implements discountstrategy
}
3.實現乙個context類:
public class discountcontext
//根據實際所使用的discountstrategy物件得到折扣價
public double getdiscountprice(double price)
return this.strategy.getdiscount(price);
} //提供切換演算法的方法
public void changediscount(discountstrategy strategy)
}
4.測試類:
public class strategytest
}
這樣,在需要新增乙個演算法時,僅需要實現打折演算法,然後在客戶端**選擇使用即可。
但是打折演算法的實現類將與客戶端耦合,此可以使用配置檔案來解耦。
學習筆記 輕量級Java EE 模式 橋接模式
橋接模式是一種結構型模式,主要應對的是 由於實際的需要,某個類具有倆個或倆個以上維度的變化,如果只是使用繼承將無法實現這種需求,或者使得設計變得相當臃腫。舉例來說 1.假設現在我們需要為某個餐廳製造選單,餐廳 牛肉麵 豬肉面,又有口味是否新增辣椒 無辣 微辣等等 假如後面還要新增新的風格呢?如果使用...
Docker學習筆記 輕量級虛擬化
學習筆記,工作需要學習一下docker,學習內容有 建房子軟體帶環境安裝 在一片空地上建房子 在乙個作業系統上配環境 依賴,各種庫,程式 搬家了在另一台機子上配環境 房子映象 裝房子的揹包 倉庫 拿出揹包裡的房子再複製乙個房子 容器 直接拎包入住,不會出現 在我的機器上可以跑,在你的機器上不能跑。解...
輕量級Java EE企業應用實戰(第三版)閱讀筆記
以前看書從來不做筆記,導致當時覺得挺好,理解挺透徹,過一段時間就全部還給作者了。再加上一直以來的,面試的打擊。面試多次每次都悲劇,不是自己做的專案沒亮點,講不清楚,就是對原理性的東西,沒有深入理解,找到最後,越來越沒底氣,越來越沒底線,結果遇到一家不咋的的公司就湊合著去了,結果,幹了一段時間不爽了,...