Android中的设计模式--单例模式和观察者模式

单利模式的几种实现方式

1、懒汉式

public class AudioManager{

    private static AudioManager instance;

private AudioManager(){}

   public static AudioManager getInstance(){

if(instance == null){

instance = new AudioManager();

}

return instance;

}

}

懒汉模式的单例模式实现是线程不安全的。

2、饿汉式

public class AudioManager{

    private static AudioManager instance = new AudioManger;

private AudioManager(){}

   public static AudioManager getInstance(){

return instance;

}

}

这个是用空间换取时间,类被创建的时候就会实例化,是线程安全的

3、懒汉式线程安全实现方式,双重验证,加锁

public class AudioManager{

    private static AudioManager instance;

private AudioManager(){}

   public static AudioManager getInstance(){

if (instance == null){
    synchronized (AudioManager.class){
        if (instance==null){
            instance = new AudioManager();
        }
    }
}
return instance;

}

}

4、内部静态类的方式实现单例模式

public class AudioManager{

private static class AudioInner{

  private static AudioManager instance = new AudioManager();

}

    private static AudioManager instance;

private AudioManager(){}

   public static AudioManager getInstance(){

return AudioInner.instance;

}

}

静态内部类是通过jvm保证线程安全的

5、使用枚举实现单例模式

public enum AudioManager{

instance;//instance 就代表audioManager的一个对象实例

}

 

破坏单例模式有三种方式 反射、序列化、clone,解决方式有检测有两个对象时抛出异常,重写clone方法,  添加readResolve(),返回Object对象

 

二、观察者模式

观察者模式应用广泛,例如Android中按钮的点击事件,广播等

用语言描述其实很简单,被观察者维护一个任务队列,任务队列中的任务是监听回调对象,被观察者对外暴露注册监听和解绑监听的方法,在注册监听中需要传一个监听回调对象,被观察者将监听对象添加到任务队列中,当被观察者发生变化时就遍历任务队列通过监听回调通知观察者。

 

 

注单例模式参考链接 https://blog.csdn.net/fd2025/article/details/79711198

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值