设计模式_初识饿汉/懒汉单例

本文详细介绍了设计模式中的单例模式,分别探讨了饿汉式和懒汉式的实现方式,强调了静态变量和构造方法的作用,以及如何确保线程安全。通过实例代码展示了两者在不同场景下的使用和效果。
摘要由CSDN通过智能技术生成

设计模式的定义

重复利用解决问题的方案

饿汉单例

单例目的是:对外只能创建(new)一个对象。

思想是:

  1. 只要类加载就会new一个对象。因为以下代码是静态代码,在类初始化是就执行一次。
    private static Singleton s = new Singleton();🔔懒汉的差别之处
  2. 将实例方法关闭(将其私有化,且不提供get与set方法,他就不可以被访问)[对外可以创建0个对象]
  3. 然后对外提供一个静态方法,可以通过方法获取单个实例,紧接着创建一个静态变量(静态变量在类加载的时候就会初始化,且只初始化一次)[对外可以创建1个对象]

饿汉代码 

创建对象

package com.powernode.javase.oop_07;

public class Singleton {
    //1.构造方法私有化
    private Singleton(){}
    //3.定义一个静态变量,在类加载的时候,初始化静态变量
    private static Singleton s = new Singleton();
    //2.对外提供一个静态的构造方法,外面可以通过这个方法获取单个实例
    public static Singleton have(){
        return s;
    }
}

🔔定义静态变量一定要在静态方法之前,因为都是静态,程序在类初始化的时候,会从上到下依次执行。

调用对象&测试

package com.powernode.javase.oop_07;

public class SingletonTest {
    public static void main(String[] args) {

        //用方法调用
        Singleton S1 = Singleton.have();

        //测试
        Singleton S2 = Singleton.have();
        System.out.println(S1 == S2);
    }
}


C:\Users\seven\.jdks\corretto-1.8.0_362\bin\java.exe -javaagent:D:\IDEAIU\lib\idea_rt.jar=55032:D:\IDEAIU\bin -Dfile.encoding=UTF-8 -classpath C:\Users\seven\.jdks\corretto-
true

Process finished with exit code 0

返回两个地址相同,所有为true。

懒汉单例

思想:在用到这个对象的时候再创建对象,不是在类加载的时候创建对象。🔔与饿汉对比

创建对象

public class Singleton {
    //1.构造方法私有化
    private Singleton(){}
    //3.定义一个静态变量,但这个变量不可以赋值,为null
    private static Singleton s;
    //2.对外提供一个静态的构造方法,外面可以通过这个方法获取单个实例
    public static Singleton have(){
        if (s == null){
            s = new Singleton();
        }
        return s;
    }
}

调用对象

package com.powernode.javase.oop_07;

public class SingletonTest {
    public static void main(String[] args) {

        //用方法调用
        Singleton S1 = Singleton.have();

        //测试
        Singleton S2 = Singleton.have();
        System.out.println(S1 == S2);
    }
}



C:\Users\seven\.jdks\corretto-1.8.0_362\bin\java.exe -javaagent:D:\IDEAIU\lib\idea_rt.jar=58796:D:\IDEAIU\bin -Dfile.encoding=UTF-8 -classpath C:\Users\seven\.jdks\corretto-
true

Process finished with exit code 0

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值