Java设计模式之单例模式

1、单例设计模式

作用/价值:保证某类的对象只有一个

具体步骤:

步骤一:私有化本类所有的构造方法

步骤二:在本类中创建唯一对象

步骤三:提供外界获取唯一对象的方式(公共的、静态的)

2、两种方式

饿汉式:

弊端:在类加载的过程中就会创建唯一对象,对象创建时机较早,有浪费内存的情况存在;

优点:就算在多线程环境下,也一定可以保证对象是唯一的;

懒汉式:

优点:在需要唯一对象的时候才会去创建对象,对象出现的时机不早也不晚,不会有浪费内存的情况;

弊端:在多线程环境下,可能不能保证对象是唯一的(需要上锁去解决这个问题);

具体代码如下:

java 复制代码
/**
 * 单例设计模式之饿汉式
 * 弊端:在类加载的过程中就会创建唯一对象,对象创建时机较早,有浪费内存的情况存在
 * 优点:就算在多线程环境下,也一定可以保证对象是唯一的
 */
public class Sun {
    private Sun() {

    }

    //这里final修饰可以不用加
    private static final Sun s = new Sun();

    public static Sun getInstance() {
        return s;
    }

    public static void test() {
        System.out.println("单例模式之饿汉式");
    }
}
java 复制代码
/**
 * 单例设计模式之懒汉式
 * 优点:在需要唯一对象的时候才会去创建对象,对象出现的时机不早也不晚,不会有浪费内存的情况
 * 弊端:在多线程环境下,可能不能保证对象是唯一的(需要上锁去解决这个问题)
 */
public class Moon {
    private Moon() {

    }

    //这里可以不用赋值null,默认也会给null
    private static Moon m = null;

    public static Moon getInstance() {
        if (m == null) {
            m = new Moon();
        }
        return m;
    }

    public static void test() {
        System.out.println("单例模式之懒汉式");
    }
}
java 复制代码
public class Main {
    public static void main(String[] args) {
        Sun s1 = Sun.getInstance();
        Sun s2 = Sun.getInstance();
        Moon m1 = Moon.getInstance();
        Moon m2 = Moon.getInstance();
        System.out.println(s1 == s2);   //结果为true
        System.out.println(m1 == m2);   //结果为true
    }
}
相关推荐
北冥湖畔的燕雀1 分钟前
C++日志系统:从原理到实战实现
java·开发语言
java修仙传2 分钟前
Java 实习日记:一次 Excel 导入校验 Bug 的定位与数据更新逻辑优化
java·数据库·bug·excel·后端开发
稽稽稽稽不如人5 分钟前
《从零开始的java从入门到入土的学习生活——Java后端篇》Chapter21——Java后端篇学习记录——Redis初步入门
java·学习·生活
ID_180079054738 分钟前
淘宝店铺所有商品 API 接口:核心能力与数据返回参考
java·服务器·前端
蜡笔小马18 分钟前
06.C++设计模式-装饰模式
c++·设计模式·装饰器模式
轻刀快马21 分钟前
浅聊Java反射
java·开发语言
Gerardisite21 分钟前
企业微信智能客服开发实战:API自动回复指南
java·开发语言·python·机器人·企业微信
要开心吖ZSH23 分钟前
零基础入门 Spring WebFlux 与 Project Reactor:从小白到顿悟
java·响应式编程·spring webflux
智塑未来23 分钟前
装备制造行业设计制造一体化痛点攻克与实战经验总结
java·开发语言·制造
Devin~Y29 分钟前
电商AIGC智能客服面试:JVM调优、Spring Cloud微服务、Redis缓存、Kafka消息、K8s观测与RAG落地
java·jvm·spring boot·redis·spring cloud·kafka·kubernetes