Java设计模式——创建型模式——单例模式(SINGLETON)

意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点

通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例多个对象。一个最好的办法就是让类自身负责保存它的唯一实例。这个类可以保证没有其他实例被创建,并且它可以提供一个访问该实例的办法

                                                    单例模式(singleton)结构图

                    Java设计模式——创建型模式——单例模式(SINGLETON)_第1张图片

1)懒汉式

  何为懒?顾名思义,就是不做事,这里也是同义,懒汉式就是不在系统加载时就创建类的单例,而是在第一次使用实例的时候再创建。

详见下方代码示例:

package sheji;

/**
 * Created with IntelliJ IDEA.
 * User:by gyw
 * Date:2018/3/13
 * Time:22:51
 */
public class Singleton {
    private static Singleton singleton;
    //构造方法让其私有化,这就是防止外界实例此对象的关键
    private Singleton(){
    }

    //此方法是获取本实例对象的唯一全局访问点
    public static Singleton getSingleton() {
        //如果此实例不存在则直接new一个新的实例 否则直接返回已有实例
        if(singleton==null)
            singleton = new Singleton();
        return singleton;
    }
}

2)饿汉式

  又何为饿?饿者,饥不择食;但凡有食,必急食之。此处同义:在加载类的时候就会创建类的单例,并保存在类中。

详见下方代码示例:

public class Singleton {
    //直接实例化对象
    private static Singleton singleton = new Singleton();
    //构造方法让其私有化,这就是防止外界实例此对象的关键
    private Singleton(){
    }

    //此方法是获取本实例对象的唯一全局访问点
    public static Singleton getSingleton() {
        return singleton;
    }
}

单例模式的优点是可以保证唯一的实例并且可以严格控制客户怎么样访问它,以及何时访问。简单来说就是对唯一实例的受控访问。

单例模式的应用场景

数据库连接池的设计一般也是采用单例模式,因为数据库连接是一种数据库资源。数据库软件系统中使用数据库连接池,主要是节省打开或者关闭数据库连接所引起的效率损耗,这种效率上的损耗还是非常昂贵的,因为何用单例模式来维护,就可以大大降低这种损耗。

Spring框架里的bean,或者说组件,获取实例的时候都是默认的单例模式



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