《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模式

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

你可能感兴趣的:(Android源码设计模式)