首页 > 其他 > 详细

单例模式

时间:2020-09-15 17:14:57      阅读:58      评论:0      收藏:0      [点我收藏+]

简介

单例模式属于创建者模式。单例类提供了一种访问其内部唯一的对象的方法,可以直接访问,无需实例化该类的对象。

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

主要解决:一个全局使用的类频繁地创建与销毁。

关键在于私有化构造函数

实现方式

1.线程不安全的懒汉式实现方式

懒汉式表示不在一开始就创建对象,在需要的时候再创建

public class LazyMode {
    /**
     * 私有化构造方法
     */
    private LazyMode() {}

    /**
     * 静态私有的实例
     * static保证类没有创建实例也可以用这个实例
     */
    private static LazyMode INSTANCE = null;

    /**
     * public的访问单例的方法
     * 这个方法也必须是static的,不然无法返回static的INSTANCE
     *
     * 注意,这个方法是线程不安全的
     */
    public static LazyMode getInstance() {

        if (INSTANCE == null){
            INSTANCE = new LazyMode();
        }

        return INSTANCE;
    }

}

2.线程安全的懒汉式实现方式

public class LazyModeSafe {

    private LazyModeSafe() {}

    private static LazyModeSafe INSTANCE;

    public static synchronized LazyModeSafe getInstance() {
        if (INSTANCE == null){
            INSTANCE = new LazyModeSafe();
        }
        
        return INSTANCE;
    }
}

这种方式具备很好的 lazy loading,能够在多线程中很好的工作,但是,效率很低,99% 情况下不需要同步。

3.饿汉式

基于 classloader 机制避免了多线程的同步问题,但是没有做到lazy load

public class HungryMode {
    private HungryMode() {}

    private static HungryMode INSTANCE = new HungryMode();

    public static HungryMode getInstance() {
        return INSTANCE;
    }
}

单例模式

原文:https://www.cnblogs.com/swifthao/p/13673421.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!