单例设计模式

单例模式(Singleton) 对应的慕课视频:https://www.imooc.com/video/1772

单例设计模式用于保证一个类只有一个实例

他有两种表现形式:懒汉式,饿汉式

饿汉式和懒汉式最明显的区别就是两者对象实例化的时间不相同。

恶汉式是在类加载的时候就创建,懒汉式是在调用实例的时候在加载。

下面来看一下饿汉式的基本代码

package songyan.demo;

//单例模式:保证一个类的实例只有一个
/**
 * 单例设计模式-饿汉式
 * @author Administrator
 *
 */
public class singleton {
    //隐藏构造函数
    private singleton(){
        }
    
    //创建该类的对象
    private static singleton instance = new singleton();
    
    //提供反复问内部实例的方法
    public static  singleton getInstance()
    {
        return instance;
    }
}

饿汉式编写顺序:

隐藏构造函数(将构造函数私有化,防止在类的外部创建对象)

创建该类的对象(private static)

对外提供访问这个对象的方法

懒汉式的实现

package songyan.demo;

//单例模式:保证一个类的实例只有一个
/**
 * 单例设计模式-懒汉式
 * @author Administrator
 *
 */
public class singleton {
    private singleton(){}
    private singleton instance;
    public singleton getInstance()
    {
        instance= new singleton();
        return instance;
    }
}

懒汉式的编写顺序与饿汉式相同,不同的是对象实例化的时间,在懒汉式中,是在访问该对象的时候将对象实例化的。

再来比较一下两种实现方式

1,饿汉式在加载类的时候比较慢,但是在运行的时候比较快。(懒汉式相反)

2,饿汉式是线程安全的,而懒汉式是线程安全的

懒汉式的线程安全是可以解决的,可以通过同步代码块或者同步函数来实现,同步代码块要比同步函数更优一些(同步函数的范围太大,同步了不必要的部分,可以使用同步函数仅同步局部即可)

当然使用同步的方式解决多线程的安全问题也是有弊端的,他会降低程序执行的效率,所以在开发过程中更多的是使用饿汉式的实现方式

猜你喜欢

转载自www.cnblogs.com/excellencesy/p/8856221.html