设计模式--单例模式

本文介绍了Java中五种单例模式的实现:饿汉模式(静态变量)、懒汉模式(线程不安全)、懒汉模式(线程安全但效率低)、双重检查和静态内部类实现。每种模式的特点和适用场景都有所阐述,特别是静态内部类实现兼顾了延迟初始化和线程安全性。
摘要由CSDN通过智能技术生成

1、饿汉模式(静态变量)

package com.test.singletonMode.type01;

/**
 * @author :Breeze
 * @date :Created in 2020/11/15 20:11
 * @description:
 */
public class SingletonTest01 {

    public static void main(String[] args) {
        Singleton instance = Singleton.getInstance();
    }
}

/**
 * 饿汉模式(静态变量)
 */
class Singleton {

    //构造器私有化,在外不能使用new来创建对象
    private Singleton() {

    }

    //本类内部创建对象,类加载时,创建
    private static final Singleton INSTANCE = new Singleton();

    //对外提供获取实例的方法
    public static Singleton getInstance(){
        return INSTANCE;
    }

}

2、懒汉模式,使用才创建,但是有隐患,线程不安全

package com.test.singletonMode.type02;

/**
 * @author :Breeze
 * @date :Created in 2020/11/15 20:24
 * @description:
 */
public class SingletonTest02 {

    public static void main(String[] args) {
        Singletion instance = Singletion.getInstance();
    }

}

/**
 * 懒汉模式,使用才创建,但是有隐患,线程不安全
 */
class Singletion {

    private Singletion() {

    }

    private static Singletion INSTANCE;

    public static Singletion getInstance() {
        if (INSTANCE == null) {
            INSTANCE = new Singletion();
        }
        return INSTANCE;
    }
}

3、懒汉模式,使用才创建,线程安全,但是效率低

package com.test.singletonMode.type03;

/**
 * @author :Breeze
 * @date :Created in 2020/11/15 20:24
 * @description:
 */
public class SingletonTest03 {

    public static void main(String[] args) {
        Singletion instance = Singletion.getInstance();
    }

}

/**
 * 懒汉模式,使用才创建,线程安全,但是效率低
 */
class Singletion {

    private Singletion() {

    }

    private static Singletion INSTANCE;

    public static synchronized Singletion getInstance() {
        if (INSTANCE == null) {
            INSTANCE = new Singletion();
        }
        return INSTANCE;
    }
}

4、懒汉,双重检查

package com.test.singletonMode.type04;

/**
 * @author :Breeze
 * @date :Created in 2020/11/15 20:38
 * @description:
 */
public class SingletonTest04 {

    public static void main(String[] args) {
        Singleton instance = Singleton.getInstance();
    }
}

/**
 * 懒汉,双重检查,既能解决性能问题,又能解决线程不安全的问题
 */
class Singleton {

    private Singleton() {

    }

    private static volatile Singleton INSTANCE;

    public static Singleton getInstance() {

        if (INSTANCE == null) {
            synchronized (Singleton.class) {
                if (INSTANCE == null) {
                    INSTANCE = new Singleton();
                }
            }
        }
        return INSTANCE;
    }

}

5、使用静态内部类

package com.test.singletonMode.type05;

/**
 * @author :Breeze
 * @date :Created in 2020/11/15 20:47
 * @description:
 */
public class SingletonTest05 {

    public static void main(String[] args) {
        Singleton instance = Singleton.getInstance();
    }

}

/**
 * 使用静态内部类
 * 静态内部类好处: 1、外部Singleton加载时,静态内部类并不会加载,只有在用到静态内部类时,才回家再
 *                2、类加载时,是线程安全的
 */
class Singleton{

    private Singleton(){

    }

    public static class SingletionInstance{
        public static final Singleton INSTANCE = new Singleton();
    }

    public static Singleton getInstance(){
        return SingletionInstance.INSTANCE;
    }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值