java里数据能否做单例,Java中的单例模式实现

单例设计模式的原则:保证内存中只有一个对象的存在

单例设计模式的步骤

声明一个类,类中有一个静态属性与类名相同

把空参构造方法声明为私有的

在类中提供一个公共的访问方法来返回该对象的实例

单例设计模式的三种实现方式

饿汉式:在构造类时 就将对象new出来 :private static SingletonDemo1 instance = new SingletonDemo1(); class SingletonDemo1{

private static SingletonDemo1 instance = new SingletonDemo1();

private SingletonDemo1() {

}

public static SingletonDemo1 getInstance() {

return instance;

}

} public class Singleton {

public static void main(String[] args) {

SingletonDemo1 s1 = SingletonDemo1.getInstance();

System.out.println(s1);

System.out.println(SingletonDemo1.getInstance());

System.out.println(SingletonDemo1.getInstance());

//输出:

//SingletonDemo1@7852e922

//SingletonDemo1@7852e922

//SingletonDemo1@7852e922

}

}

代码分析:因为SingletonDemo1的构造方法为private因此不能创建新的对象,而SingletonDemo1的对象通过类中的instance创建了出来,且是static类型,因此初始化时就会加载到内存中,每次调用getInstance方法就会返回该instance所以每次调用该方法都是返回此instance。

懒汉式 class SingletonDemo2{

private static SingletonDemo2 instance;

private SingletonDemo2() {

}

public static SingletonDemo2 getInstance() {

if(instance == null) {

instance = new SingletonDemo2();

}

return instance;

}

} public class Singleton {

public static void main(String[] args) {

SingletonDemo2 s2 = SingletonDemo2.getInstance();

System.out.println(s2);

System.out.println(SingletonDemo2.getInstance());

System.out.println(SingletonDemo2.getInstance());

/*输出

SingletonDemo2@4e25154f

SingletonDemo2@4e25154f

SingletonDemo2@4e25154f

*/

}

}

代码分析:与饿汉式相类似,但是将getInstance()方法定义为static,同时将instance也定义为static,加载类时会将该方法直接加载到内存然后如果instance为null就创建一个SingletonDemo2对象,不为null就直接返回该对象。保证了内存中只有一个对象。

简易式 class SingletonDemo3{

public static final SingletonDemo3 instance = new SingletonDemo3();

private SingletonDemo3() {

}

} public class Singleton {

public static void main(String[] args) {

SingletonDemo3 s3 = SingletonDemo3.instance;

System.out.println(s3);

System.out.println(SingletonDemo3.instance);

System.out.println(SingletonDemo3.instance);

/*输出

SingletonDemo3@70dea4e

SingletonDemo3@70dea4e

SingletonDemo3@70dea4e

*/

}

}

代码分析:与饿汉式类似,不定义getInstance()方法 而是将instance设置为public直接调用,但是这种方法有缺陷,可能会造成instance的修改,不安全。

饿汉式与懒汉式的区别

饿汉式:空间换时间

懒汉式:时间换空间

在多线程访问时,饿汉式不会创建多个对象,懒汉式会创建多个对象

如果考虑线程安全问题 使用饿汉式,不考虑线程安全问题的话可以使用懒汉式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值