小猪使用单例模式作为这个系列的开始篇,不仅是因为小猪觉得单例模式是所有的设计模式系列中最简单的一种,而且是很多时候我们已经在不知不觉中使用之了。
在很多场景中我们都会希望某个变量,或者是某一个类在程序的整个过程中都只有一个,不同地方用到的实际上都是一个实例,这个需求如何实现呢?
在任何一本入门书中,作者几乎都会讲到一个关键词——static:静态的,其实小猪之前很长一段时间一直以为单例模式就是用这个static关键词加上final关键词申明一个变量,于是乎这个变量就是单例的,所以这个就叫单例模式。
但是……
单例模式应该是这个的,在单例模式的类中
1,该类只有一个实例
2,该类自行创建该实例(在该类内部创建自身的实例对象)
3,向整个系统公开这个实例接口
在java中编写单例的类应该这样
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15class LazySingleton {
//私有
private static LazySingleton instance = null;
//私有构造函数
private LazySingleton\(\){}
//公开,静态的工厂方法,需要使用时才去创建该单体
public static LazySingleton getInstance\(\) {
if( instance == null ) {
instance = new LazySingleton\(\);
}
return instance;
}
}
使用时直接调用其getInstance()方法Singleton obj = Singleton.getInstance\(\);
其结构如下:
小猪觉得单例模式的几个关键点
1:其构造函数得是私有的,这样保证了这个类不能在程序的其他部分不会被new出来
2:变量是私有的,理由同上
3:有一个静态的获取实例的方法,在这个方法中验证第二条中的变量是否已经被实例化,如果还没有的话则实例化一个出来并返回,如果已经被实例化则返回已经实例化的变量。
这样就实现了所谓的单例模式,嘿嘿,是不是很简单呢?今天就讲这么多吧!