最近简单学习了单例设计模式,这里做一下笔记
java中的单例设计模式,要保证类在内存中只有一个对象,如何实现?
一般情况下,可以通过构造方法来创建类的不同实例,
所以可以通过私有构造方法
的方式来实现类中只有一个对象,著名的方式有两种,饿汉式
,懒汉式
- 方法1:饿汉式
思路:- 1.私有构造方法,在本类中创建对象
- 2.私有成员变量
- 3.对外提供成员变量的get方法
代码如下:
class Single{
//1.私有构造方法,其它类不能访问该构造方法
private Single(){
}
//2.创建本类对象,s是一个成员变量,不能用对象调用,只能用类名调用,
//但是类名点调用的话,属性有可能被修改
//3.成员变量被私有,不能用类名点调用,只能用get方法访问
private static Single s = new Single();
public static Single getS() {
return s;
}
}
- 饿汉式因为一开始就在本类中创建对象,所以会占用内存,但是节省了时间
-
懒汉式
- 懒汉式是单例设计模式的延迟加载方式 - 它的特点是一开始不在本类中创建对象,要经过判断才创建 - 所以不占内存,但是速度慢
代码如下:
class Single{
//1.私有构造方法,其它类不能访问该构造方法
private Single(){
}
//2.声明一个引用,不去创建对象
private static Single s;
public static Single getS() {
if(s==null){//判断,如果没有s,才创建
s = new Single();
}
return s;
}
}
- 懒汉式有一个缺陷:
- 就是在多线程的情况下,有可能会创建多个对象,有安全隐患,因此开发时不建议使用
- 第三种方式:私有构造方法,本类中创建一个final修饰的对象
代码:
class Single{
//1.私有构造方法,其它类不能访问该构造方法
private Single(){
}
//2.声明一个final修饰的引用,不可改变
public final static Single s = new Single();
}
- 因为final修饰的对象不可被更改,所以也能保证内存种只有一个对象
以上就是单例设计模式中的3种实现方式,开发时一般用饿汉式
饿汉式懒汉式是最经典的实现方法,其实还有别的方法,以后有机会再接触吧