单利设计模式的几种实现方式

一,实现一之懒汉

/*
 * 单利模式,懒汉模式,是线程安全的
 */
public class Singleton {
	public static Singleton instance = new Singleton();
	
	private Singleton(){
		
	}
	
	public static Singleton getInstance(){
		return instance;
	}
}

二,实现二之饿汗

/*
 * 单利模式,饿汉,是线程不安全的,需要特殊的处理
 */
public class Singleton {
	/**
	 * 对保存实例的变量加volatile修饰,因为在jdk1.4以前的版本中,很多JVM对对volatile关键字的实现有问题
	 * 会导致双重检查加锁的失败,因此双重检查加锁的机制只能用在jdk1.5以及以上的版本中
         *volatitle和C++一样,能屏蔽掉虚拟机中一些必要的优化代码
	 */
	private volatile static Singleton instance = null;
	private Singleton(){
		
	}
	
	public static Singleton getInstance(){
		if(instance == null){
			synchronized (Singleton.class) {
				if(instance == null){
					instance = new Singleton();
				}
			}
		}
		
		return instance;
	}
}
三,使用静态内部类实现单利,巧妙的同时实现了延迟加载和线程安全

(一)静态内部类

静态内部类相当于外部类的static成分,它的对象与外部类对象间不存在依赖关系,因可直接创建。而非静态内部类的实例,是绑定在外部对象的实例中的

静态内部类中,可以定义静态方法,在静态方法中只能够引用外部类的静态成员

静态内部类相当于其外部类的成员,只有在第一次被使用的时候才会被加载

(二)多线程缺省同步锁

有静态初始化器(静态字段上或静态代码块的初始器)初始化数据时

访问final字段时

在创建线程之前创建对象时

线程可以看见它将要处理的对象时

/*
 * 利用静态内部类和多线程缺省同步锁
 */
public class Singleton {
	private static class SingletonHolder{
		/**
		 * 静态初始化器,由JVM来保证线程安全
		 */
		private static Singleton instance = new Singleton();
	}
	
	private Singleton(){
		
	}
	
	public static Singleton getInstance(){
		return SingletonHolder.instance;
	}
}
四,利用枚举

单元素的枚举可以实现单例

枚举实质是功能齐全的类

/*
 * 利用枚举实现单利
 */
public enum Singleton {
	uniqueInstance;
	
	public void singletonOperation(){
		System.out.println("单利对象的业务方法");
	}
}





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值