软件设计常用的一种设计模式 —— 单例模式
体现:在应用这个模式时,单例对象的类必须保证只有一个实例存在。
好处:许多时候整个系统只需要拥有一个全局的对象,这样有利于我们协调整个系统的行为。
场景举例
1.服务器的配置信息放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象读取配置信息,这样也简化了复杂环境下的配置管理。
2.windows的task manager(任务管理器)就是单例的,我们并不能同时打开两个。
3.多线程的线程池一般也是单例模式的,因为线程池要方便对线程进行控制管理。
实现方式
实现单例模式的对象类中构造函数是私有的,这样其他代码就不能通过调用该构造函数实例化对象,只能通过该类的静态方法(通常使用getInstance这个名词)来得到该类的唯一实例。
类别:
不加锁(synchronized)的懒汉单例模式,不支持多线程,实际上也称不上单例模式。
public class Singleton{
private Singleton(){
}
private static Singleton singleton;
public static Singleton getInstance(){
if(singleton==null){
singleton = new Singleton();
}
return singleton;
}
}
进化一点点的话,加上synchronized关键词。
public class Singleton{
private static Singleton singleton;
private Singleton(){}
public static synchronized getInstance(){
if(singletion == null){
singletion = new Singletion();
}
return singletion;
}
}
或者,但是这样容易产生垃圾。饿汉式倒是加载很快,只是会占据一定内存。
public class Singletion{
private static Singletion singleton = new Singletion();
private Singletion(){}
public static Singletion getInstance(){
return singleton;
}
}
最好的一种方式,枚举。简洁、且自动支持序列化机制,绝对防止多次实例化。
public enum Singleton{
INSTANCE;
public void method(){}
}
原文地址:https://www.cnblogs.com/lldyl/p/9862354.html