单例模式(懒汉式与饿汉式)

什么是单例模式?
这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
单例模式常见的写法有: 懒汉式单例,饿汉式单例,登记式单例(可忽略)。
单例模式的特点:

  1. 单例类只能有一个实例
  2. 单例类必须自己创建自己的唯一实例
  3. 单例类必须给所有其他对象提供这一对象实例

懒汉式单例:
懒汉式单例在第一次调用的时候初始化 懒汉式单例是线程不安全的,在并发的情况下,可能出现多个Singleton实例,要实现线程安全需要对getInstance()进行改造,以确保线程安全和浪费内存。
优点:第一次调用才初始化,避免内存浪费。
缺点:必须通过synchronized加锁保证单例,但加锁会影响效率。

 public class Singleton {
 // 类定义声明
 private static Singleton mSingleton = null;
 // 私有构造方法
 private Singleton() { }
 // 懒汉式单例在第一次调用的时候初始化 ,如此写法是线程不安全的,当有多个请求(并发)同时
 调用getInstance时,可能会产生多个实例
  private static Singleton getInstance() {
	 if (mSingleton == null) {
	 	 mSingleton = new Singleton();
 	 }
 	 return mSingleton;
 	}
}

饿汉式单例
饿汉式单例在类初始时已经实例化,线程安全。
优点:没有加锁,执行效率会提高。
缺点:每次加载类都会实例化一次,浪费内存,产生多余的垃圾。

public class Singleton {
	//  饿汉式单例在类初始化的时候完成实例化
	private static  final  Singleton mIntance = new Singleton();
	// 私有构造函数
	 private Singleton(){}
	 public static Singleton getInstance() {
		  return mIntance;
		 }
	 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值