搜索
您的当前位置:首页正文

设计模式--单例模式

来源:榕意旅游网

单例模式

前言

在软件设计中,有时确实存在一个类仅能用来产生一个唯一对象的必要性。例如,一个大公司的打印室虽然可以有多台打印机,但是其打印管理系统中只有一个打印任务控制对象,该对象管理打印排队并分配打印任务给各打印机。再如,在WIndows系统中,应该只有一个文件系统与一个文件管理系统(Windows Manager)。
怎样才能确保一个类只有一个实例?有两种方法解决该问题,一个是程序员在应用程序中使用代码保证仅有一个实例被创建,另外一种方法是不依靠应用程序员,而是精心设计需要仅有一个实例的类,由该类本身的结构确保其仅能够被创建一个实例。实践证明,第二个方法从根本上上保证仅有一个实例被创建的有效方法。这就是单例模式(Singleton Pattern)所要表述的内容。

概念

单例模式(Singleton Pattern),属于创建类型的一种常用的软件设计模式。通过单例模式的方法创建的类在当前进程中只有一个实例(根据需要,也有可能一个线程中属于单例,如:仅线程上下文内使用同一个实例)

思路

为了防止客户程序利用构造方法创建多个对象,将构造方法声明为private 类型。其原因是,如果构造方法是public 类型的,则客户程序永远可以使用该构造方法创建不同对象。但这样做的问题是,如果一个类的构造方法是private 类型的,其他类就无法使用该构造方法来创建对象,从而该类就成为一个不可用的类。
为了解决这个问题,该类必须提供一个获得实例的方法,通常称为getInstance() 方法。该方法返回一个类的实例。值得注意的是,该方法必须是静态方法,否则客户端将无法调用该方法。应该确保无论客户程序调用该getInstance() 方法多少次,得到的始终是同一个对象。

为了满足上述要求,可将一个希望客户类仅能创建一个实例的类President 设计如下:

public class President {
	private static President instance;
	private String name;
	private President(String name) {
	this.name = name;
	}
	public static Singleton getInstance(String name) {
	if(instance == null&&!name.equals(null))//1
		instance = new President(String name);//2
	return instance;//3
	}
}

以上类的设计保证了仅有一个President 对象被创建。

类设计图

单例模式结构类图:

介绍

1. 单例模式的优点

应用实例

举世皆浊我独清,众人皆醉我独醒

因篇幅问题不能全部显示,请点此查看更多更全内容

Top