`

java设计模式-单例模式初探

阅读更多
概念:单例模式表示一个类只会生成唯一的一个对象。

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

应用场景:线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用。总之,选择单例模式就是为了避免不一致状态,避免政出多头。

实现方法:有两种实现方法:Singleton通过将构造方法限定为private避免了类在外部被实例化,在同一个虚拟机范围内,Singleton的唯一实例只能通过getInstance()方法访问。事实上,通过Java反射机制是能够实例化构造方法为private的类的,那基本上会使所有的Java单例实现失效

第一种:
public class SingletonTest 
{
	public static void main(String[] args) 
	{
		Singleton singleton = Singleton.getInstance();
		Singleton singleton1 = Singleton.getInstance();
		
		System.out.println(singleton == singleton1);
	}
}
class Singleton
{
	private static Singleton singleton = new Singleton();
	
	private Singleton()
	{	
	}
	
	public static Singleton getInstance()
	{
		return singleton;
	}
}


第二种:这一种在多线程并发环境下很可能出现多个Singleton实例。(有待深究)
public class SingletonTest 
{
	public static void main(String[] args) 
	{
		Singleton singleton = Singleton.getInstance();
		Singleton singleton1 = Singleton.getInstance();
		
		System.out.println(singleton == singleton1);
	}
}
class Singleton
{
	private static Singleton singleton = null;
	
	private Singleton()
	{	
	}
	
	public static Singleton getInstance()
	{
		if(singleton == null)
		{
			singleton = new Singleton();
		}
		return singleton;
	}
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics