设计模式(四):单例模式

这篇具有很好参考价值的文章主要介绍了设计模式(四):单例模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 单例模式的介绍

单例模式(Singleton Pattern)属于创建型模式,它确保一个类只有一个实例,并提供了一个全局访问点来访问该实例。

优点:

  1. 在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例
  2. 避免对资源的多重占用。

缺点:

  1. 没有接口,不能继承。
  2. 与单一职责原则冲突,一个类应该只关心内部逻辑,而不关心外部怎么样来实例化。

2. 单例模式的类图

设计模式(四):单例模式,设计模式,设计模式,单例模式,java

3. 单例模式的实现

3.1 懒汉式(线程不安全)

这种实现最大的问题就是不支持多线程。因为没有加锁 synchronized,所以严格意义上它并不算单例模式。

package blog;

public class SingleObject {
    private static SingleObject instance;

    private SingleObject() {}

    public static SingleObject getInstance() {
        if (instance == null) {
            instance = new SingleObject();
        }

        return instance;
    }
}

3.2 懒汉式(线程安全)

这种方式采用双锁机制,安全且在多线程情况下能保持高性能。

package blog;

public class SingleObject {
    private volatile static SingleObject instance;

    private SingleObject() {}

    public static SingleObject getInstance() {
        if (instance == null) {
            synchronized (SingleObject.class) {
                if (instance == null) {
                    instance = new SingleObject();
                }
            }
        }
        return instance;
    }
}

3.3 饿汉式

这种方式比较常用,没有加锁,执行效率会提高。但在类加载时就初始化,浪费内存。

package blog;

public class SingleObject {
    private static final SingleObject instance = new SingleObject();

    private SingleObject() {}

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

3.4 静态内部类

这种方式是 SingleObject 类被装载了,INSTANCE 不会被初始化。因为SingleObjectHolder 类没有被主动使用,只有通过显式调用 getInstance 方法时,才会显式装载SingleObjectHolder类,从而实例化INSTANCE。即实现了延迟加载,也保证线程安全。

package blog;

public class SingleObject {
    private static class SingleObjectHolder {
        private static final SingleObject INSTANCE = new SingleObject();
    }

    private SingleObject() {}

    public static SingleObject getInstance() {
        return SingleObjectHolder.INSTANCE;
    }
}

3.5 枚举

这种实现方式还没有被广泛采用,但这是实现单例模式的最佳方法。它不仅能避免多线程安全问题,而且还自动支持序列化机制,防止反序列化重新创建新的对象,绝对防止多次实例化。文章来源地址https://www.toymoban.com/news/detail-859995.html

package blog;

public class SingleObject {
    enum SingletonEnum {
        INSTANCE;
        
        private final SingleObject unique;
        
        SingletonEnum() {
            unique = new SingleObject();
        }

        public SingleObject getInstnce(){
            return unique;
        }
    }

    private SingleObject() {}

    public static SingleObject getInstance() {
        return SingletonEnum.INSTANCE.getInstnce();
    }
}

到了这里,关于设计模式(四):单例模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 设计模式篇(Java):单例模式

    上一篇:设计模式篇(Java):前言(UML类图、七大原则) 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法)。 构造器私有化 (防止 new ) 类的内部创建对象 向外暴露一个静

    2024年02月11日
    浏览(49)
  • Java设计模式---单例 工厂 代理模式

    单例模式是设计模式中的一种,属于创建型模式。在软件工程中,单例模式确保一个类只有一个实例,并提供一个全局访问点。这种模式常用于那些需要频繁实例化然后引用,且创建新实例的开销较大的类,例如数据库连接池、缓存管理等。 意图 :保证一个类仅有一个实例

    2024年01月24日
    浏览(39)
  • java设计模式-单例

    单例模式是一种创建型设计模式,它可以保证一个类只有一个实例,并提供全局访问点。单例模式在实际开发中经常使用,可以避免多个实例引起的资源浪费和同步问题。常见的java实现方式有多种。 饿汉式单例模式是指在类加载时就创建了单例对象,因此在调用时不需要再

    2024年01月18日
    浏览(43)
  • Java设计模式(八)— 单例模式3

    单例模式之静态内部类 单例模式之枚举方式 单例模式之JDK源码分析 Hello,小伙伴们,欢迎来到柚子的博客~让我们一起成长吧o( ̄▽ ̄)ブ 提示:以下是本篇文章正文内容,下面案例可供参考 代码如下(示例): 类被装载的时候,类里面的静态内部类也是会被装载的,而且线

    2024年02月09日
    浏览(39)
  • 03-JAVA设计模式-单例模式详解

    单例模式(Singleton Pattern)是设计模式中的一种,它确保一个类仅有一个实例,并提供一个全局访问点来访问该实例。这种设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 单例模式的应用场景十分广泛,主要涉及需要频繁使用某个对象而又不想重复创建的情况

    2024年04月13日
    浏览(45)
  • Java设计模式之单例模式

    定义:保证一个类仅有一个实例,并提供一个全局访问点 类型:创建型 想确保任何情况下都绝对只有一个实例 例如:线程池,数据库连接池一般都为单例模式 单例模式优点 在内存中只有一个实例,减少内存开销 可以避免对资源的多重占用 设置全局访问点,严格控制访问

    2024年02月02日
    浏览(58)
  • java设计模式-单例模式(Singleton)

    单例模式(Singleton)就是一个类只能有一个实例,自行实例化,并向系统提供这一实例,这个类就是单例类。单例模式的特点: 一个类只能有一个实例; 单例类自己实例化; 单例类给其它对象提供这个单一实例。 资源管理类经常被设计为单例模式,例如管理属性文件的类。

    2024年02月15日
    浏览(30)
  • Java与设计模式(4):单例模式

    单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供全局访问点来访问该实例。 在单例模式中,类的构造函数被私有化,从而禁止外部直接实例化该类。通过一个静态方法或静态变量来控制类的实例化过程,并返回同一个实例。 单例模式的特点包括: 单一

    2024年02月12日
    浏览(57)
  • Java——单例设计模式

    设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式。设计模式免去我们自己再思考和摸索。就像是经典的棋谱,不同的棋局,我们用不同的棋谱、“套路”。 经典的设计模式共有23种。每个设计模式均是特定环境下特定问题的

    2024年02月11日
    浏览(34)
  • java基础之设计模式(单例模式,工厂模式)

    是一种编码套路 单例模式 一个类只能创建一个实例 饿汉式 直接创建唯一实例 缺点: 有可能浪费空间 懒汉式 在获取实例是创建唯一对象 缺点: 线程效率慢 懒汉式-进阶版 在懒汉式的基础上,利用同步代码块结合二次校验提高执行效率 工厂模式 是一种底层技术,通常用于底层框

    2024年01月18日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包