本章講述java設計模式中,策略模式相關的知識點。
策略模式,又叫算法簇模式,就是定義了不同的算法族,並且之間可以互相替換,此模式讓算法的變化獨立於使用算法的客戶。策略模式屬於對象的行為模式。其用意是針對一組算法,將每一個算法封裝到具有共同接口的獨立的類中,從而使得它們可以相互替換。策略模式使得算法可以在不影響到客戶端的情況下發生變化。
策略模式是對算法的包裝,是把使用算法的責任和算法本身分割開來,委派給不同的對象管理。策略模式通常把一個系列的算法包裝到一系列的策略類裡面, 作為一個抽象策略類的子類。用一句話來說,就是:“准備一組算法,並將每一個算法封裝起來,使得它們可以互換”。下面就以一個示意性的實現講解策略模式實 例的結構。
1 //策略模式設計代碼
2 //計算價格基類
3 public interface MemberStrategy {
4 public double calcPrice(double booksPrice);
5 }
6 //初級會員
7 public class PrimaryMemberStrategy implements MemberStrategy {
8 @Override
9 public double calcPrice(double booksPrice) {
10 System.out.println("對於初級會員的沒有折扣");
11 return booksPrice;
12 }
13 }
14 //中級會員
15 public class IntermediateMemberStrategy implements MemberStrategy {
16 @Override
17 public double calcPrice(double booksPrice) {
18 System.out.println("對於中級會員的折扣為10%");
19 return booksPrice * 0.9;
20 }
21 }
22 //高級會員
23 public class AdvancedMemberStrategy implements MemberStrategy {
24 @Override
25 public double calcPrice(double booksPrice) {
26 System.out.println("對於高級會員的折扣為20%");
27 return booksPrice * 0.8;
28 }
29 }
30 //計算價格類
31 public class Price {
32 //持有一個具體的策略對象
33 private MemberStrategy strategy;
34 /**
35 * 構造函數,傳入一個具體的策略對象
36 * @param strategy 具體的策略對象
37 */
38 public Price(MemberStrategy strategy){
39 this.strategy = strategy;
40 }
41
42 /**
43 * 計算圖書的價格
44 * @param booksPrice 圖書的原價
45 * @return 計算出打折後的價格
46 */
47 public double quote(double booksPrice){
48 return this.strategy.calcPrice(booksPrice);
49 }
50 }
51 //客戶端調用
52 public class Client {
53 public static void main(String[] args) {
54 //選擇並創建需要使用的策略對象
55 MemberStrategy strategy = new AdvancedMemberStrategy();
56 //創建環境
57 Price price = new Price(strategy);
58 //計算價格
59 double quote = price.quote(300);
60 System.out.println("圖書的最終價格為:" + quote);
61 }
62 }