java设计模式: 单例设计模式

单例模式: 一个类只有一个实例对象, 如果一个类比较大频繁对类进行销毁和创建浪费性能, 如果类是可以复用的就可以使用单例模式。
1.线程安全。synchronized关键字。
2.是否懒加载。懒加载好处,假如对象在程序启动的时候就构建, 万一没有使用过就比较浪费性能了。
3.是否反射破坏。枚举类, 但是不能实现懒加载。

 

单例模式:

复制代码
package com.ultiwill.test.designpattern;

/**
 * 单例设计模式
 *
 * @author chong.zuo
 * @date 2020/9/28 15:45
 */
public class LazySingletonTest {

    public static void main(String[] args) {
        LazySingleton instance1 = LazySingleton.getInstance();
        LazySingleton instance2 = LazySingleton.getInstance();
        System.out.println(instance1 == instance2);
    }

}

/**
 * 懒汉式
 * 当类被第一次调用时候就会创建类实例,
 */
class LazySingleton {

    /**
     * 本类内部创建对象实例
* volatile 阻止指令重排问题
*/ private volatile static LazySingleton lazySingleton; /** * 构造方法私有化,外部不能new */ private LazySingleton(){} /** * 提供一个公有的静态方法,返回实例对象 * @return */ public static LazySingleton getInstance() { if (lazySingleton == null) { synchronized (LazySingleton.class) { if (lazySingleton == null) { return lazySingleton = new LazySingleton(); } } } return lazySingleton; } } /** * 饿汉式 * 当类初始化时候就会创建类实例, * 不管你用不用,先创建出来,然后每次调用的时候,就不需要判断了,节省了运行时间。 */ class HungrySingleton { /** * 本类内部创建对象实例 */ private static HungrySingleton hungrySingleton = new HungrySingleton(); /** * 构造方法私有化,外部不能new */ private HungrySingleton(){} /** * 提供一个公有的静态方法,返回实例对象 * @return */ public static HungrySingleton getInstance() { return hungrySingleton; } }
复制代码

 

posted @   所向披靡zz  阅读(98)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示