天天看點

《Android 源碼設計模式解析與實戰》學習筆記

1 面向對象的六大原則

  • 單一職責原則

    英文名稱:Single Responsibility Principle,縮寫SRP。定義:對于一個類而言,應該僅有一個引起它變化的原因。

  • 開閉原則

    英文名稱:Open Close Principle,縮寫OCP。定義:軟體中的對象(類、子產品、函數等)應該對于擴充是開放的,對于修改是封閉的。

  • 裡氏替換原則

    英文名稱:Liskov Substitution Principle,縮寫LSP。定義:所有引用父類的地方必須能夠透明地使用其子類的對象。

  • 依賴倒置原則

    英文名稱:Dependency Inversion Principle,縮寫DIP。定義:通過高層次的子產品不依賴低層次的子產品的實作細節達到解耦的目的。

  • 接口隔離原則

    英文名稱:Interface Segregation Principle,縮寫ISP。定義:類間的依賴關系應該建立在最小的接口上。

  • 最少知識原則

    英文名稱:Least Knowledge Principle,縮寫LKP。定義:一個對象應該對其他對象有最少的了解。

2 單例模式

單例模式須確定線程安全、防止反序列化導緻重新生成執行個體。

常用的實作方式如下:

  • Double CheckLock (DCL)
public class Singleton {
    private static Singleton sInstance;

    private Singleton() {

    }

    public static Singleton getInstance() {
        if (sInstance == null) {
            synchronized (Singleton.class) {
                if (sInstance == null) {
                    sInstance = new Singleton();
                }
            }
        }

        return sInstance;
    }

}
           

優點:延遲加載,減少了同步開銷

缺點:高并發環境下有很少機率的缺陷導緻單例模式失效

  • 靜态内部類單例模式
public class Singleton {

    private static class SingletonHolder {
        private static final Singleton sInstance = new Singleton();
    }

    private Context mContext;

    private Singleton() {

    }

    public static Singleton getsInstance() {
        return SingletonHolder.sInstance;
    }

    public Singleton init(Context context) {
        if (context != null && mContext == null) {
            mContext = context.getApplicationContext();
        }
        return this;
    }
}
           

優點:延遲加載,線程安全,推薦使用的單例模式

3 Builder模式

将一個複雜對象的建構與它的表示分離,使得同樣的建構過程可以建立不同的表示。