Android 设计模式一:单例模式

来源:互联网 发布:路由器无网络怎么回事 编辑:程序博客网 时间:2024/05/17 21:50

*## 单例模式
* 定义:确保某一个类只有一个实例,而且自行实例化并向系统提供这个实例。
* 常用四种实现方式:饿汉式,懒汉式,静态内部类,枚举。

1.饿汉式

public class Singleton{private static fianl Singleton instance = new Singleton();//私有化构造器,避免外部访问。使用反射仍然可以访问,所以安全是相对的。//但仍然可以通过哈希值等进行限制,提高安全性。priavte Singleton(){}//对外暴露的接口,用于获取实例public static Singleton getInstance(){    return instance;  }}

优点:能够在线程安全的情况下实现单例。
缺点:由于类一加载就会创建实例,所以会较早占用系统资源。反序列化会重新创建对象。

2.懒汉式

public class Singleton{    private static Singleton instance;    priavte Singleton(){   }//加synchronized上锁,可以一定程度上确保安全性public static synchronized Singleton getInstance(){    if(instance == null){        instance = new Singleton();    }    return instance;  }}

优点:能够实现延迟加载,节约内存。在单线程中能很好工作。
缺点:并发下可能会创建多个实例,每次判断都会耗费一些时间。反序列化会重新创建对象。

3.静态内部类 (最好的单例模式实现)

public class Singleton{priavte Singleton(){}public static Singleton getInstance(){    return SingletonHolder.instance;}//静态内部类确保了在首次调用getInstance()的时候才会初始化SingletonHolder,从而导致实例被创建。//并且由JVM保证了线程的安全。priavte static class SingletonHolder{    priavte static final Singleton instance = new Singleton();}//防止反序列化private Object readResolve() throws  ObjectStreamException{               return SingletonHolder.instance;    }  }

4.枚举

public enum Singleton{INSTANCE;public void doSomething(){    System.out.println("doSomething");   }}
原创粉丝点击