面试题2:实现Singleton模式

题目:设计一个类,我们只能生成该类的一个实例。

转载请注明出处:http://blog.csdn.net/lvsaixia/article/details/39583193

只能生成一个实例的类是实现Singleton(单例)模式的类型。由于设计模式在面向对象程序设计中起着举足轻重的作用,面试中经常会出现这样的面试题。


不好得解决方法一:只适用于单线程环境

public sealed class Singleton
{
	private singleton()
	{
		
	}
	
	private static Singleton instance = null;
	
	public static Singleton Instance{
		get
		{
			if (instance == null)
				instance = new Singleton();
			return instance;
		}
	}
}


不好的解法二:虽然在多线程环境中能工作但是工作效率不高

public sealed class Singleton
{
	private singleton()
	{
		
	}
	
	private static readonly object syncObj = new object();
	
	private static Singleton instance = null;
	
	public static Singleton Instance{
		get
		{
			lock(syncObj){
				if (instance == null)
					instance = new Singleton();
			}
			return instance;
		}
	}
}


可行的解法:加同步锁前后两次判断实例是否已存在

public sealed class Singleton
{
	private singleton()
	{
		
	}
	
	private static readonly object syncObj = new object();
	
	private static Singleton instance = null;
	
	public static Singleton Instance{
		get
		{
			if (instance == null)
				lock(syncObj)
				{
					instance = new Singleton();
				}
		}
			return instance;		
	}
}

推荐的解法一:利用静态构造函数

public sealed class Singleton
{
	private singleton()
	{
		
	}
	
	private static Singleton instance = new Singleton();
	
	public static Singleton Instance{
		get
		{
			return instance;
			}
		}
}

推荐的解法二:实现按需创建实例

public sealed class Singleton
{
	private singleton()
	{
		
	}
	
	
	
	public static Singleton Instance{
		get
		{
			return instance;
			}
		}
	
	class Nested{
		static Nested(){}
		insternal static readonly Singleton instance = new Singleton();
	}
}

请阅读这篇博客。博主详细讲解了23种设计模式。

转载请注明出处:http://blog.csdn.net/lvsaixia/article/details/39583193



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值