android中的设计模式

单例模式

单例模式保证了在程序运行的过程中,某个实现了单例模式的类只有一个实例。

实现方式

  1. 饿汉式

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class Singleton {
    private static Singleton instance = new Singleton();

    private Singleton() {
    }

    public static Singleton getInstance() {
    retun instance;
    }
    }
    • 优点:线程安全
    • 缺点:类加载的时候就实例化静态对象,若程序运行过程不需用到该对象则浪费了资源
  2. 懒汉式

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class Singleton {
    private static Singleton instance = null;

    private Singleton() {
    }

    public static Singleton getInstance () {
    if (instance == null) {
    instatnce = new Singleton();
    }
    return instance;
    }
    }
    • 优点:延迟加载
    • 缺点:线程不安全
  3. 懒汉式加锁

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class Singleton {
    private static Singleton instance = null;

    private Singleton() {
    }

    public static synchronized Singleton getInstance () {
    if (instance == null) {
    instatnce = new Singleton();
    }
    return instance;
    }
    }
    • 优点:延迟加载且线程安全
    • 缺点:造成不必要的同步开销
  4. 双重锁

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    public class Singleton {
    private static Singleton instance = null;

    private Singleton () {
    }

    public static Singleton getInstance () {
    // If already initialized, no need to get lock everytime.
    if (instance == null) {
    synchronized (Singleton.class) {
    if (instance == null) {
    instance = new Singleton();
    }
    }
    }
    return instance;
    }
    }
    • 优点:延迟加载,解决了多余的同步,线程安全(两次判空,第一层是为了避免不必要的同步。 第二层是为了在instance为null的情况下创建实例)
  5. 静态内部类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    public class Singleton() {

    private Singleton() {
    }

    public static Singleton getInstance () {
    return SingletonHolder.instance;
    }

    /**
    * 静态内部类,只有在装载该内部类时才会去创建单例对象
    */
    private static class SingletonHolder {
    private static final Singleton instance = new Singleton();
    }

    }
    • 优点:利用Java虚拟机加载类的特性实现延迟加载和线程安全

建造者模式

如果一个类的构造需要很多参数,但是这些参数并不都是必须的,这种情况适合使用建造者模式,如AlertDialog.Builder

观察者模式

如果想要在某个对象发生变化时立刻收到通知,则使用观察者模式,如各种点击监听事件,rxjava等。

原型模式

如果持有一个对象,想要快速获取一个相同属性的对象,则使用原型模式,常见的是实现clone()方法。

责任链模式

如果有一个任务从一个节点出发,沿着一条链不断传递,直到找到处理该任务的节点,则为责任链模式,如android的事件分发机制。

工厂模式

在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。如BitmapFactory通过各种decodeXXX()就可以从不同渠道获得Bitmap对象。

策略模式

策略模式的精髓就在于,你传入一个类,后面的处理就能按照这个类的实现去做。以动画为例,设置不同的插值器对象,就可以得到不同的变化曲线。

适配器模式

适配器模式是作为两个不兼容的接口之间的桥梁。android中有各种adapter,主要就是适配数据在布局中的显示。

装饰器模式

装饰器模式允许向一个现有的对象添加新的功能,同时又不改变其结构。具体可参考装饰器模式

0%