开发中常用的设计模式
一、单例模式
什么叫单例模式?
单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例,在单例模式中,又分为懒汉式和饿汉式,其特点为:
1、这个类只能有一个实例
2、它必须自行创建这个实例
3、它必须自行向整个系统提供这个实例。下面我们单独介绍下,他们之间的调用和区别
1、懒汉式:
从字意上我们很容易看出来,这个方法是在加载的时候才会被调用,属于线程不安全的,如果启用多线程的时候,同时调用入口方法获取实例时,会报错,例如:
//懒汉单例,线程不安全,当启动多线程,同时获取多个实例时会报错
public class SingleTon{
public SingleTon(){}
private static SingleTon instance = null;
private static SingleTon getInstance(){
if(instance == null){
instance = new SingleTon();
}
return instance;
}
}
//懒汉模式也提供一种解决同步调用时不能正常工作的方法,使用synchronized声明访问点,但是工作效率低
public class SingleTon{
private static SingleTon instance = null;
//此时如果不加上同步锁的话,线程是不安全的,所以要加上同步锁
private static synchronized SingleTon getInstance()
{
if(instance == null){
instance = new SingleTon();
}
return instance;
}
}
//看到上面的代码,是不是感觉这样写懒汉式已经可以了呢?其实不然,懒汉式还有一种写法叫做双重检查模式,代码如下:
public class SingleTon{
private static SingleTon instance = null;
private SingleTon(){
}
public static SingleTon getInstance(){
if(instance == null){
Synchronized(SingleTon.class){
if(instance == null){
instance = new SingleTon();
}
}
}
}
}
2、饿汉式:
饿汉式在类创建的同时就已经创建好一个静态的对象供系统使用,以后不再改变,所以天生是线程安全的。
public class SingleTon1{
private static SingleTon1 instance =new SingleTon1();
public SingleTon1(){}
private static SingleTon1 getInstance(){
return instance;
}
}