Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> 《Android源碼設計模式解析與實戰》讀書筆記(七)

《Android源碼設計模式解析與實戰》讀書筆記(七)

編輯:關於android開發

《Android源碼設計模式解析與實戰》讀書筆記(七)


第七章、策略模式

通常如果一個問題有多個解決方案時,最簡單的就是利用if-else或者switch-case方式根據不同的情景選擇不同的解決方案,但是這樣耦合性太高 、代碼臃腫、難以維護等。這時就可以使用策略模式來解決。

1.定義

策略模式定義了一系列的算法,並將每一個算法封裝起來,而且使他們還可以相互替換。策略模式讓算法獨立於使用它的客戶而獨立變化。

2.使用場景

1.針對同一類型問題的多種處理方式,僅僅是具體行為有差別時。
2.需要安全地封裝多種同一類型的操作時。
3.出現同一抽象類有多個子類,而又需要使用if-else或者switch-case來選擇具體子類時。

3. 簡單實現

需求:計算圖書價格,初級會員沒有折扣,中級會員打9折,高級會員打8折。如果一般寫法,應該是if-else判斷他是什麼級別的會員,在計算相應的折扣。下面使用策略模式來進行實現。

抽象折扣類

public interface MemberStrategy {
    /**
     * 計算圖書的價格
     * @param booksPrice    圖書的原價
     * @return    計算出打折後的價格
     */
    public double calcPrice(double booksPrice);
}

初級會員折扣類

public class PrimaryMemberStrategy implements MemberStrategy{
    /**
     * 初級會員折扣
     */
    @Override
    public double calcPrice(double booksPrice) {
        System.out.println("對於初級會員的沒有折扣");
        return booksPrice;
    }
}

中級會員折扣類

public class IntermediateMemberStrategy implements MemberStrategy{
    /**
     * 中級會員折扣
     */
    @Override
    public double calcPrice(double booksPrice) {
        System.out.println("對於中級會員的折扣為10%");
        return booksPrice * 0.9;
    }
}

高級會員折扣類

public class AdvancedMemberStrategy implements MemberStrategy{
    /**
     * 高級會員折扣
     */
    @Override
    public double calcPrice(double booksPrice) {
        System.out.println("對於高級會員的折扣為20%");
        return booksPrice * 0.8;
    }
}

價格類

public class Price {
    //持有一個具體的策略對象
    private MemberStrategy strategy;
    /**
     * 構造函數,傳入一個具體的策略對象
     * @param strategy    具體的策略對象
     */
    public Price(MemberStrategy strategy){
        this.strategy = strategy;
    }

    /**
     * 計算圖書的價格
     * @param booksPrice    圖書的原價
     * @return    計算出打折後的價格
     */
    public double quote(double booksPrice){
        return this.strategy.calcPrice(booksPrice);
    }
}

客戶端

public class Client {

    public static void main(String[] args) {
        //選擇並創建需要使用的策略對象
        MemberStrategy strategy1 = new AdvancedMemberStrategy();
        //創建環境
        Price price = new Price(strategy1);
        //計算價格
        double quote = price.quote(300);
        System.out.println("圖書的最終價格為:" + quote);
    }

}

結果

對於高級會員的折扣為20%
圖書的最終價格為:240.0

4.Android源碼中的策略模式實現

1.時間插值器(TimeInterpolator)

LinearInterpolator、AccelerateInterpolator、CycleInterpolator等實現Interpolator,通過getInterpolator(float input)獲取當前的時間百分比,以此來計算動畫的屬性值。

5.總結

策略模式主要用來分離算法,在相同的行為抽象下有不同的具體實現策略。這個模式很好地演示了開閉原則,也就是定義抽象,注入不同的實現,從而達到很好的可擴展性。

優點:

1.結構清晰明了、使用簡單直觀。
2.耦合度相對而言較低,擴展方便。
3.操作封裝也更為徹底,數據更為安全。

缺點:

1.隨著策略的增加,子類也會變得繁多。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved