首页 > 代码库 > 设计模式之单例模式(singleton)

设计模式之单例模式(singleton)

1、定义

确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例

2、通用类图

image

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)可以让对象长久驻留内存。
  • 状态随时记录,可以使用异步记录方式,或者使用观察者模式,记录状态的改变,写入文件或数据库。确保即使单例对象重新初始化也可以从资源环境获得销毁前的数据,避免应用数据丢失。