简单理解设计模式之单例模式

1.什么是单例模式?我们为什么要用单例模式?

首先我们要知道我们为什么要用单例模式,其实在很多的时候我们都用到了单例模式,这也是很经常要用到的,比如一个对象我们只需要它实例化一次,不允许它任意的创建。其实这就是单例模式,就是我们要一个对象只实例化一次,比如数据库的连接。。

2.单例模式有哪些?

常用的单例模式分为两种:一种是懒汉模式,另一种是饿汉模式。

3.怎么理解这两种常用的单例模式?

(1)饿汉模式:其实就是先实例化我们需要创建的单例对象。
---饿坏了,迫不及待的想吃东西,就叫做饿汉模式。
(2)懒汉模式:当我们需要用到单例对象的时候再实例化。
---你不用,我就不实例化。
但是总的来说创建单例模式的基本步骤是一样的:

步骤如下:

第一步:实例化该类的构造函数,

第二步:私有静态化实例对象,保证只在本类执行

第三步:返回一个共有的函数,返回该实例对象


4.通过代码来说详细的讲解:

(1)饿汉模式
public class HungrySingleTon {
	
	private static HungrySingleTon instance = new HungrySingleTon();//迫不及待的想吃东西--创建对象
	
	private HungrySingleTon(){
		
	}
	
	public static HungrySingleTon getInstance(){
		return instance;
	}

}
(2)懒汉模式
public class LazySingleTon {
	
	private static LazySingleTon instance;//很懒啊,不想创建,因为没有用到
	
	private LazySingleTon(){
		
	}
	
	public static LazySingleTon getInstance(){
		if(instance == null){
			instance = new LazySingleTon();
		}
		return instance;
	}

}
5.上面两种各单例模式的“变种”(也是常用的):

(1)静态内部类的方法

public class CommonSingleTon {
	
	private static class SingleTon{
		private static CommonSingleTon instance = new CommonSingleTon();
	}
	private CommonSingleTon(){
		
	}
	public static CommonSingleTon getInstance(){
		return SingleTon.instance;
	}
}
(2)双重检测,线程安全的(但不是保证百分百安全)

public class SingleTon {

	private volatile static SingleTon instance = null;
	
	private SingleTon(){}
	
	public static SingleTon getSingleTonInstance(){
		if(instance==null){
			synchronized (SingleTon.class) {
				if(instance == null){
					return instance = new SingleTon();
				}
			}
		}
			return instance;
		
		
	}

}

单例模式其实还有很多的变种,比如同步方法,LockL的方法等等,还有枚举的方法,但是都离不开他的概念,工作中可以慢慢的体会检索。

有不对的地方欢迎指教。


你可能感兴趣的:(简单理解设计模式)