Android 设计模式一:单例模式

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

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");
   }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值