共计 1357 个字符,预计需要花费 4 分钟才能阅读完成。
一、概述
单例模式的定义就是确保某一个类只有一个实例,并且提供一个全局拜访点
单例模式具备典型的三个特点:
- 只有一个实例。
- 自我实例化。
- 提供全局拜访点。
常见的单例模式实现形式有五种:饿汉式、懒汉式、双重检测锁式、动态外部类式和枚举单例。而在这五种形式中饿汉式和懒汉式又最为常见,上面就对饿汉式和懒汉式进行详细分析。
二、代码分析
1. 懒汉式
public class Singleton {
//2. 本类外部创建对象实例
private static Singleton instance = null;
// 1. 构造方法私有化,内部不能 new
private Singleton() {}
//3. 提供一个私有的静态方法,返回实例对象
public static Singleton getInstance() {if (instance == null) {instance = new Singleton();
}
return instance;
}
}
单例模式的懒汉式体现了缓存的思维,延时加载就是一开始不要加载资源或者数据,始终 等,等到马上就要应用这个资源的或者数据了,躲不过来了才去加载。
懒汉式是定性的工夫换空间,不加同步的懒汉式是线程不平安的,如何实现线程平安的懒汉式(双重查看加锁):
public class Singleton {
private volatile static Singleton instance = null;
// 私有化构造方法
private Singleton() {}
public static Singleton getInstance() {if (instance == null) {synchronized (Singleton.class) {if (instance == null) {instance = new Singleton();
}
}
}
return instance;
}
}
总而言之,因为该模式是在运行时加载对象的,所以加载类比拟快,然而对象的获取速度绝对较慢,且线程不平安,如果想要线程平安的话能够加上 synchronized 关键字,然而这样会付出惨重的效率代价。
2. 饿汉式
public class Singleton {private static Singleton instance = new Singleton();
// 私有化构造方法
private Singleton() {}
public static Singleton getInstance() {return instance;}
}
饿汉式是典型的空间换工夫,当类装载的时候就会创立类实例,不论你用不必,先创立进去,而后每次调用的时候,就不须要判断了,节俭了运行工夫。
三、应用场景
1、工作管理器就是很典型的单例模式,比方不能关上两个 windows task manager。
2、(回收站)也是典型的单例利用。在整个零碎运行过程中,回收站始终保护着仅有的一个实例。
3、网站的计数器,个别也是采纳单例模式实现,否则难以同步。
4、数据库连接池的设计个别也是采纳单例模式,因为数据库连贯是一种数据库资源。数据库软件系统中应用数据库连接池,次要是节俭关上或者敞开数据库连贯所引起的效率损耗,这种效率上的损耗还是十分低廉的,因为何用单例模式来保护,就能够大大降低这种损耗。
5、多线程的线程池的设计个别也是采纳单例模式,这是因为线程池要不便对池中的线程进行管制。
正文完