前段时间看了《设计模式之禅》这本介绍设计模式的书,感觉讲的挺好,最起码给我的感觉是很通俗易懂,相信大家也都学过一些设计模式,设置是为了准备面试而特意去网上查了一些有关设计模式的资料,看完这本书本来是决定每天至少写一篇关于博客的,目的就是讲自己学到的东西做一个整理,但是由于中间各种原因,没有坚持下来,翻看自己的博客,发现几篇文章还是14年写的,很是惭愧,今天决定每天发表一篇博客,主要是对自己学到的东西做一些总结。
单例模式的定义:
确保一个类只有一个实例,而且自行实例化并像整个系统提供这个实例
通过定义可以得出单例模式的几个有点:
- 单例类在内存中只有一个实例,所以节省了系统的内存开销
- 单例类只有一个实例,所以节省了系统的性能开销
- 单例类在内存中只有一个实例,所以可以保证所有类共享该实例
单例模式通用类图如下:
单例模式分为:饿汉式和懒汉式
懒汉式代码如下:
public class Singleton {
// 构造器私有化
private Singleton() {
}
// 私有化 静态 本类型的属性
private static Singleton instance = null;
// 对外提供一个静态的返回本类型的方法
public static Singleton getInstance() {
if(instance==null){
instance=new Singleton();
}
return instance;
}
}
饿汉式代码如下:
public class Singleton {
// 构造器私有化
private Singleton() {
}
// 私有化 静态 本类型的属性
private static Singleton instance = new Singleton();
// 对外提供一个静态的返回本类型的方法
public static Singleton getInstance() {
return instance;
}
}
通过看代码可以得知单例模式的缺点是无法被继承,因为单例模式的要求是构造方法私有化。
单例模式的适用场景:
- 资源共享
- 要求生成唯一序列号的环境
虽然我们很少自己写单例模式,但是单例模式在很多地方被使用了,相信使用过spring的人,应该知道在spring里每个Bean默认是单例的,这样做的优点就是Spring容器可以管理这些Bean的生命周期。