什么是单例模式

这篇具有很好参考价值的文章主要介绍了什么是单例模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

什么是单例模式

1. 单例(单个的实例)

  1. 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。
  2. 单例模式有两种方式:1) 饿汉式 2) 懒汉式

2. 单例模式应用实例

演示饿汉式懒汉式单例模式的实现。

步骤如下:

  1. 构造器私有化 =》 防止其他类直接 new
  2. 类的内部创建对象
  3. 向外暴露一个静态的公共方法。getInstance
  4. 代码实现
package com.xjz.single_;

/**
 * 单例模式[饿汉式]
 * 1. 只要完成类加载,同步创建好对象, 即使用户没有调用 getInstance() 方法, 对象也会被创建。
 * 2. 饿汉式不存在线程安全问题
 */
public class SingleTon01 {
    public static void main(String[] args) {

        //GirlFriend girlFriend = new GirlFriend("小白");
        //GirlFriend girlFriend = new GirlFriend("小张");

        //通过方法可以获取 gf 对象
        GirlFriend instance = GirlFriend.getInstance();
        System.out.println(instance); //GirlFriend{name='小红红'}

        GirlFriend instance2 = GirlFriend.getInstance();
        System.out.println(instance2); //GirlFriend{name='小红红'}

        System.out.println(instance == instance2); //true

//        System.out.println(GirlFriend.n1); //构造器被调用 888

    }
}

//只有一个类,GirlFriend
//只能有一个女朋友
class GirlFriend{
    private String name;
    public static int n1 = 888;

    //为了能够在静态方法中,返回 gf对象,需要将其修饰为 static
    //对象,通常是重量级的对象,饿汉式可能造成了创建了对象,但是还没有是试用
    public static GirlFriend gf = new GirlFriend("小红红");

    //如何保障我们只能创建一个 GirlFriend 对象
    //步骤[单例模式-饿汉式]
    //1. 将构造器私有化
    //2. 在类的内部直接创建对象(该对象是 static)
    //3. 提供一个公共的 static 方法,返回 gf 对象
    private GirlFriend(String name) {
        System.out.println("构造器被调用");
        this.name = name;
    }
    
	//静态的公共方法,用来返回对象
    public static GirlFriend getInstance(){
        return gf;
    }

    @Override
    public String toString() {
        return "GirlFriend{" +
                "name='" + name + '\'' +
                '}';
    }
}

package com.xjz.single_;

/**
 * 演示懒汉式的单例模式
 * 懒汉式,只有当用户使用 getInstance 时,才返回 cat对象,后面再次调用时,会返回上次创建的 cat对象
 * 懒汉式存在线程安全问题
 */
public class SingleTon02 {
    public static void main(String[] args) {

        System.out.println(Cat.n1); //打印666,且不会调用构造器(创建cat对象)
        Cat instance = Cat.getInstance();
        System.out.println(instance);//构造器调用,创建cat对象

    }
}

//希望在程序运行过程中,只能创建一个 Cat 对象
//使用单例模式
class Cat{
    private String name;
    public static int n1 = 666;
    private static Cat cat; //默认是 null

    //步骤
    //1. 仍然构造器私有化
    //2. 定义一个 static 静态属性对象
    //3. 提供一个 public 的 static 方法,可以返回一个 Cat对象
    //4. 懒汉式,只有当用户使用 getInstance 时,才返回 cat对象,后面再次调用时,会返回上次创建的 cat对象
    //  从而保证了单例
    private Cat(String name){
        System.out.println("构造器调用...");
        this.name = name;
    }
    public static Cat getInstance(){
        if (cat == null){ //如果还没有创建 cat对象
            cat = new Cat("小可爱");
        }
        return cat;
    }

    @Override
    public String toString() {
        return "Cat{" +
                "name='" + name + '\'' +
                '}';
    }
}

3. 饿汉式 VS 懒汉式

  1. 二者最主要的却别在于创建对象的时机不同:饿汉式是在类加载就创建了对象实例,而懒汉式是在使用时才创建。
  2. 饿汉式不存在线程安全问题,懒汉式存在线程安全问题。
  3. 饿汉式存在浪费资源的可能,因为如果程序员一个对象实例都没有使用,那么饿汉式创建的对象就浪费了,懒汉式是使用时才创建,所以就不存在这个问题。
  4. 在我们 javaSE标准类中,java.lang.Runtime 就是经典的单例模式[饿汉式]

什么是单例模式,设计模式,单例模式,javascript,开发语言文章来源地址https://www.toymoban.com/news/detail-660105.html

到了这里,关于什么是单例模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 什么是单例模式,如何在Java中实现单例?

    单例模式是一种创建对象的设计模式,它确保只有一个实例,并提供对该实例的全局访问点。在Java中实现单例有懒汉式和饿汉式两种方式。 懒汉式单例模式: 在懒汉式单例模式中,对象创建在第一次使用时才会被创建。例如,当某个类第一次被实例化时,JVM会在堆内存中分

    2024年02月15日
    浏览(43)
  • 单例模式类设计|什么是饿汉模式和懒汉模式

    那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助。 高质量干货博客汇总 https://blog.csdn.net/yu_cblog/category_12379430.html?spm=1001.2014.3001.5482 一个类只能创建一个对象,

    2024年02月16日
    浏览(33)
  • Python入门【​编辑、组合、设计模式_工厂模式实现 、设计模式_单例模式实现、工厂和单例模式结合、异常是什么?异常的解决思路 】(十七)

    👏作者简介:大家好,我是爱敲代码的小王,CSDN博客博主,Python小白 📕系列专栏:python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发 📧如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀 🔥如果感觉博主的文章还不错的

    2024年02月14日
    浏览(28)
  • 【JAVA】Java 中什么叫单例设计模式?请用 Java 写出线程安全的单例模式

    🍎 个人博客: 个人主页 🏆 个人专栏: JAVA ⛳️   功不唐捐,玉汝于成 目录 前言 正文 懒汉式(Lazy Initialization): 双重检查锁定(Double-Checked Locking): 结语 我的其他博客 在软件设计中,单例设计模式是一种重要的设计思想,它确保了一个类只有一个实例,并提供了一

    2024年01月15日
    浏览(41)
  • DCL 单例模式设计为什么需要 volatile 修饰实例对象

     DCL 问题,是在基于双重检查锁设计下的单例模式中,存在不 完整对象的问题。而这个不完整对象的本质,是因为指令重排序导致的。 当我们使用 instance=new DCLExample()构建一个实例对象的时候,因为 new 这个操作并不是原子的。所以这段代码最终会被编译成 3 条指令: 为对象

    2024年02月08日
    浏览(41)
  • 实际开发中常用的设计模式--------单例模式(知识跟业务场景结合)-----小白也能看懂(通俗易懂版本)

    1.定义 单例模式是一种创建型设计模式,它通过使用私有构造函数和静态方法来确保一个类只有一个实例,并且提供全局访问点来获取该实例。 通过使用单例模式,我们可以方便地管理全局唯一的对象实例,并且避免了多次创建相同类型的对象所带来的资源浪费问题 2.业务场

    2024年02月12日
    浏览(33)
  • 113、单例Bean是单例模式吗?

    通常来说,单例模式是指在一个JVM中,一个类只能构造出来一个对象,有很多方法来实现单例模式,比如懒汉模式,但是我们通常讲的单例模式有一个前提条件就是规定在一个JVM中,那如果要在两个JVM中保证单例呢?那可能就要用分布式锁这些技术,这里的重点是,我们在讨

    2024年02月14日
    浏览(38)
  • 懒汉单例设计模式与饿汉单例设计模式

    单例模式即一个类确保只有一个对象,主要用于避免浪费内存 1 .饿汉单例设计模式 :拿到对象时,对象就早已经创建好了 写法: 把类的构造器私有 在类中自己创建一个对象,并赋值到一个变量 定义一个静态方法,返回自己创建的这个对象 2. 懒汉单例设计模式 :第一次拿到对象时

    2024年02月21日
    浏览(44)
  • 【设计模式】单例设计模式

    目录 1、前言 2、基本语法 2.1、懒汉式单例 2.2、饿汉式单例 2.3、双重检验锁单例模式 2.4、静态内部类单例模式 2.5、枚举单例模式 2.6、ThreadLocal单例模式 2.7、注册单例模式 3、使用场景 4、使用示例 5、常见问题 5、总结 单例模式是一种设计模式,它确保一个类只能创建一个实

    2024年02月09日
    浏览(34)
  • 设计模式学习(一)单例模式补充——单例模式析构

    目录 前言 无法调用析构函数的原因 改进方法 内嵌回收类 智能指针 局部静态变量 参考文章 在《单例模式学习》中提到了,在单例对象是通过 new 动态分配在堆上的情况下,当程序退出时,不会通过C++的RAII机制自动调用其析构函数。本文讨论一下这种现象的原因以及

    2024年03月19日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包