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

单例模式是设计模式中使用很频繁的一种模式,单例模式的目的是要控制特定的类只产生一个对象,当然允许在一定情况下灵活改变对象的个数。如何限制对象的产生,一个办法是将构造函数编程私有(至少是受保护的),使得外面的类不能用过引用来产生对象。

 

第一种方式:

class Singleton{
	//静态属性
	private static Singleton single = new Singleton();
	//私有方法
	private Singleton(){}
	//静态方法
	public static Singleton getInstance(){
		return single;
	}
}

第二种方式:

 

class Singleton{
	//静态属性
	private static Singleton single = null;
	//私有方法
	private Singleton(){}
	//静态方法
	public static synchronized Singleton getInstance(){
		if(single == null){
			single = new Singleton();
		}
		return single;
	}
}

 第一种方法中,实例是在类被加载的时候实例化的,多次加载会被多次实例化,第二种方式使用同步处理(防止多线程中产生多个实例),在反应速度上比第一种方法慢一点。

以上两种方法都失去了多态性,不允许被继承。

 

单例模式可分成有状态和无状态,有状态的单例对象一般也是可变的单例对象,多个单例对象在一起可以作为一个状态仓库一样向外提供服务。没有状态的单例对象也就是不变的单例对象,仅作提供工具函数。

 

抛开单例模式,如下方法也可以得到单例

 

public static final Singleton INSTANCE = new Singleton();

关于单例模式的使用场景还不是很清楚,没能看懂它潜在的优缺点,以后补上。

 

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