首页 > 代码库 > 设计模式之单例模式(singleton)
设计模式之单例模式(singleton)
1、定义
确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例
2、通用类图
Singleton类称为单例类,通过使用private的构造函数确保了在一个应用中只产生一个实例,并且是自行实例化的(在Singleton中自己使用new Singleton())。通用源码如下所示:
饿汉模式:
package singleton;public class Singleton { private static final Singleton singleton=new Singleton(); //限制产生多个对象 private Singleton(){ } //通过该方法获得实例对象 public static Singleton getSingleton(){ return singleton; } //类中其他方法,尽量使用static public static void doSomething(){ }}懒汉模式:
package singleton;public class Singleton1 { private static Singleton1 singleton=null; //限制产生多个对象 private Singleton1(){ } //通过该方法获得实例对象 public static synchronized Singleton1 getSingleton(){ if(singleton==null){ singleton=new Singleton1(); } return singleton; }}
4、最佳实践
一般是管理全局的,共享的资源
1、在spring中每个bean默认都是单例的。但是可以设置成非单例模式
2、数据库连接
3、线程池
4、设置网站访问计数器,可以使用单例模式。如果我们一个单例对象在内存中长久不用,JVM就任务这个对象是一个垃圾,在CPU资源空闲的情况下该对象会被清理掉,下次再调用时就需要重新产生一个对象。计数器可能有出现恢复原状的情况,应用就会出现故障。解决方式:(在java1.2版本后已经改掉了)
- 由容器管理单例的生命周期,javaEE容器或者框架级容器(Spring)可以让对象长久驻留内存。
- 状态随时记录,可以使用异步记录方式,或者使用观察者模式,记录状态的改变,写入文件或数据库。确保即使单例对象重新初始化也可以从资源环境获得销毁前的数据,避免应用数据丢失。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。