设计模式学习笔记——单例模式

定义:

确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。

单例模式的通用类图如下:


代码如下:

public class Singleton {
	private static final Singleton singleton=new Singleton();
	
	//私有的构造函数,限制产生多个对象
	private Singleton(){
		System.out.println("singleton is created");
	}
	
	public static Singleton getInstance(){
		return singleton;
	}
	
	public void doSomething(){
		System.out.println("Hello Singleton!");
	}
}


这里需要注意几个地方:

1、要定义一个私有的静态的成员变量,并且在声明变量的时候就直接进行初始化,这样做是为了防止多线程操作而有可能出现的产生多个实例情况。

2、构造函数要定义成私有的,以限制产生多个对象。

3、要有一个静态的返回实例化后的成员变量的函数getInstance(),并且是公开的静态的,由类名进行调用。


单例模式的优点:

1、因为只有一个实例存在内存中,减少了内存的开支,特别是一个对象需要频繁的创建、销毁时,而且创建或销毁时性能又无法优化,单例模式的优势就非常明显。

2、单例模式可以避免对资源的多重占用。

单例模式的缺点:

1、因为单例模式它要求“自行实例化”,所以一般没有接口,扩展很困难。

2、单例模式对测试是不利的,因为它没有接口,不能通过mock等方式虚拟一个对象。


单例模式的扩展:

如果要求一个类只产生两三个对象,该怎么办呢?来看一下类图:


代码如下:

public class MutiSingleton {
	
	//定义最多能产生的实例数量
	private static int maxNumOfSingleton=2;
	
	//定义一个实例列表,存放生成的实例
	private static ArrayList singletons=new ArrayList();
	
	//当前实例的序列号
	private static int countNumOfSingleton=0;
	
	private MutiSingleton(){
		
	}
	
	//产生所有的实例
	static{
		for(int i=0;i


你可能感兴趣的:(设计模式)