栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

设计模式之单例模式

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

设计模式之单例模式

1、单例模式的定义

确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
以下代码中,singleton = new Singleton(); 指的就是自行实例化。

public class Singleton {

    private static final Singleton singleton = new Singleton();

    // 限制只能有一个实例
    private Singleton(){

    }
    // 通过get方法获取实例
    public static Singleton getSingleton() {
        return singleton;
    }

    public void doSomeThing(){

    }
}
2、单例模式的优缺点 2.1 优点

因存在中只有一个实例,减少了内存的开支。若一个对象需要频繁的创建与销毁,且性能无法优化时,可以考虑使用单例模式。

因存在中只有一个实例,减少了系统的性能消耗,若一个对象的产生需要较多的资源时,如产生其他的依赖对象。则可以产生一个单例对象,使其永久的存在内存中来解决。

避免资源重复占用,比如写文件

设置全局访问点,比如工具类

2.2 缺点

单例模式因需要自行实例化,因此一般没有接口或抽象类,扩展困难。单例模式与单一职责原则冲突。 3 使用场景

共享数据的访问点,比如页面计数器,不需要每次都记录到数据库中创建一个对象需要过多的资源,并且经常用到时需要定义大量的静态常量和静态方法,比如工具类 4 注意事项

高并发模式下防止产生多个示例的线程安全问题。

public class Singleton {

    private static final Singleton singleton = null;

    // 限制只能有一个实例
    private Singleton(){

    }
    // 通过get方法获取实例
    public static Singleton getSingleton() {
        if (singleton == null) {
            singleton = new Singleton();
        }
        return singleton;
    }
}

以上代码在高并发的情况下就有可能生成两个或多个实例。解决的方法有很多,比如用第一张图的饿汉式单例或双重检测机制来解决。
  需要注意对象的复制情况,最好的方法就是不实现Cloneable接口
  另外还需要注意垃圾回收机制,如果一个单例对象在内存中长期未使用,JVM会认为这个对象是个垃圾,空闲时将其收掉。下次调用时会创建一个新的出来,会失去原有的状态,导致应用出错。可以由容器管理单例的生命周期得以解决,比如Java EE容器、sping容器

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/709061.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号