设计模式--单例模式[2]

核心作用

保证一个类只有一个实例,并且提供一个访问该类实例的方法。由于只生产一个实例,减少了系统性能开销。

应用场景

  • windows 任务管理器
  • 数据库连接池的设计
  • Spring中的Bean都是单例模式
  • 网站的计数器功能

代码示例

单例模式主要有饿汉式、懒汉式两种实现方式:

  • 饿汉式:线程安全,调用效率高,不能延时加载;
  • 懒汉式:线程安全(加锁),调用效率不高,可以延时加载;

饿汉式代码如下:

/**
 * 饿汉式单例模式
 *
 * @author mac
 * @date 2018-05-25 16:23
 */
public class SingletonDemo1 {
    private static SingletonDemo1 instance = new SingletonDemo1();
    private SingletonDemo1(){

    }

    public static SingletonDemo1 getInstance(){
        return instance;
    }
}

饿汉式单例模式代码中,static变量会在类装载时进行初始化,此时不存在多线程访问的情况,天然安全。

懒汉式代码如下:


/**
 * 懒汉式单例模式
 *
 * @author mac
 * @date 2018-05-25 16:23
 */
public class SingletonDemo2 {
    private static SingletonDemo2 instance ;
    private SingletonDemo2(){}

    public synchronized static SingletonDemo2 getInstance(){
        if(instance == null){
            return new SingletonDemo2();
        }
        return instance;
    }
}

懒汉式单例模式,非线程安全,需要使用使用synchronized关键字来保证线程安全。

测试使用


public class SingletonTest {
    public static void main(String[] args) {
        SingletonDemo1 s1 = SingletonDemo1.getInstance();
        SingletonDemo1 s2 = SingletonDemo1.getInstance();
        System.out.println(s1);
        System.out.println(s2);
    }
}

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦