简单的单例

singleton:单例模式,保证一个类仅有一个实例,并提供一个访问它的全局访问点




一个简单的单例模式

class Singleton{
	private static Singleton singleton;
	private Singleton(){
		
	}
	public static Singleton getSingleton(){
		if(singleton==null){
			singleton=new Singleton();
		}
		return singleton;
	}
}


客户端代码

public static void main(String[] args) {
		Singleton s1=Singleton.getSingleton();
		Singleton s2=Singleton.getSingleton();
		if(s1==s2){
			System.out.println("两个对象是相同的实例!");
		}
	}

单例模式的好处:因为Singleton类封装它的唯一实例,这样可以严格的控制客户怎样访问它以及何时访问它。简单的说就是对唯一实例的受控访问!


单例和使用类(如Math)的不同点:

使用类不保存状态,仅提供一些静态方法和静态属性让外界使用,不可继承,实用类就是一些方法的合集

单例类有状态,可以被继承,单例就是有着唯一对象的实例。


多线程时的单例(懒汉模式)

class Singleton{
	private static Singleton singleton;
	private static final Object obj=new Object();
	private Singleton(){
		
	}
	public static Singleton getSingleton(){
		if(singleton==null){
			synchronized (obj) {
				if(singleton==null){//防止多线程安全问题
					singleton=new Singleton();
				}
			}
		}
		return singleton;
	}
}

饿汉模式

class Singleton {
	private static final Singleton singleton= new Singleton();;
	private Singleton() {

	}
	public static Singleton getSingleton() {
		return singleton;
	}
}






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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值