23设计模式之单利设计模式

单利设计模式

  • 特点:

单利设计模式设计的类有且只有一个实例对象

  • 使用场景

单例设计模式只应在有真正的“单一实例”的需求时才可使用。

  • 设计步骤
  1. 私有化构造方法,有几个构造方法就私有化几个,保证其他地方不能实例化本类对象。
  2. 本类中创建一个本类的实例化对象。
  3. 提供一个能够返回本类对象的方法。
  • 设计方法
  1. 饿汉式:在创建类属性时,创建一个本类对象引用并直接new出对象。(加载本类时就创建对象)
  2. 懒汉式:在返回本类对象的方法中创建对象。(需要时调用方法再创建对象)
  • 代码
  1. 饿汉式:
/**
 * 饿汉式
 */
public class Simple {
	//1.将构造方法私有化(保证其他地方不能创建本类对象)
	private Simple(){}
	
	//2.创建一个成员变量
	private static Simple simple = new Simple();
	
	//3.提供一个返回本类实例对象的方法
	public static Simple getInstanceSimple(){
		return simple;
	}
}

饿汉式设计出的类是线程同步(线程安全)的。

      2.懒汉式:

/**
 * 懒汉式
 */
public class Simple {
	
	//1.将构造方法私有化(保证其他地方不能创建本类对象)
	private Simple(){}
	
	//2.创建一个成员变量
	private static Simple simple;
	
	//3.提供一个返回本类实例对象的方法
	public static Simple getInstanceSimple(){
        //判断当前是否已经存在一个本类实例对象    如果存在就不创建
		if(simple == null){  
			simple = new Simple();
		}
		return simple;
	}
}

懒汉式设计的类是线程不同步的(线程不安全),如果同时有多个线程访问本类,有可能导致本类实例不唯一。

为了解决这种问题,融入多线程编程,下面来看一下多线程下的单利设计模式:

/**
 * 多线程下的单例模式(懒汉式) 
 */
public class Simple {
	private static Simple simple = null;

	private Simple() {}

	public static Simple getInstance() {
        // 多加一次判断,是为了解决效率问题
		if (simple == null) { 
            // 加个同步锁 是为了解决安全问题(不管有多少线程同时访问,只会存在一个实例)
			synchronized (Simple.class) {
				if (simple == null) {
					simple = new Simple();
				}
			}
		}
		return simple;
	}
}
  • 总结

 饿汉式:在创建类属性时就创建了本类对象,线程安全。

 懒汉式:需要得到单利对象时再创建对象,线程不安全,需要结合多线程设计。

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值