问:单例模式意义:
在项目中,有的对象只需要存在一个就足够了,多创建对象则会浪费资源,单例模式可以保证项目对象只存在一个,且不会被多次创建。
java实现例子(最少代码):
public class Singleton {
public static Singleton instance = new Singleton();
private Singleton(){
}
}
问:为什么自己的类里会有一个自己的静态实例?
答:首先因为静态关键字可以保证创建代码只执行一次,其次使用public关键字可以保证直接通过类名访问,比较方便。
问:为什么构造器私有?
答:防止在其他地方实例化新的对象,同时也有标记的功能,在实例化时编译器会报错,提醒程序员该类是单例模式。
问:为什么网络上其他教程里的单例模式中,静态实例的关键字是private,而不是public?而且还有一个获取静态实例的public方法?
答:首先本篇的重点是用最简java代码实现单例模式,且单例模式的核心就是静态实例和构造器私有,只要有这两个存在就可以实现单例。
用关键字private描述静态实例,添加一个获取静态实例的public方法取获取实例,优点比起直接获取实例,使用方法更不容易产生歧义。
方法的存在来有一个原因:
容易针对不同的情况而增加请求对象方式的灵活性(例如懒汉式和饿汉式)。
如下所示:
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton (){}
public static Singleton getInstance() {
return instance;
}
}