《HeadFirst设计模式(第二版)》第五章代码——单例模式

这篇具有很好参考价值的文章主要介绍了《HeadFirst设计模式(第二版)》第五章代码——单例模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

代码文件目录:

《HeadFirst设计模式(第二版)》第五章代码——单例模式,HeadFirst设计模式(第二版)源码,设计模式,单例模式,java文章来源地址https://www.toymoban.com/news/detail-640351.html

 初始版本:
package Chapter5_SingletonPattern.origin;

/**
 * @Author 竹心
 * @Date 2023/8/5
 **/

public class Singleton {
    private static Singleton uniqueInstance;

    private Singleton(){}

    public static Singleton getInstance(){
        if(uniqueInstance == null){
            uniqueInstance = new Singleton();
        }
        return uniqueInstance;
    }

    //问题:多线程中会出现多个实例被创建的情况

    //other functions

}
三种解决多线程问题的方法:
package Chapter5_SingletonPattern.Multithread;

import Chapter5_SingletonPattern.origin.Singleton;

/**
 * @Author 竹心
 * @Date 2023/8/5
 **/

public class Singleton1 {
    private static Singleton1 uniqueInstance;

    private Singleton1(){}

    //使用synchronized迫使每个线程进入此方法之前必须轮到他
    //但是这样会导致性能开销大

    public static synchronized Singleton1 getInstance(){
        if(uniqueInstance == null){
            uniqueInstance = new Singleton1();
        }
        return uniqueInstance;
    }

    //other functions
}
package Chapter5_SingletonPattern.Multithread;

/**
 * @Author 竹心
 * @Date 2023/8/5
 **/

public class Singleton2 {
    //急切创建实例:在静态初始化器中就创建实例
    private static Singleton2 uniqueInstance = new Singleton2();

    private Singleton2(){}

    public static Singleton2 getInstance(){
        return uniqueInstance;
    }

    //other functions
}
package Chapter5_SingletonPattern.Multithread;

import Chapter5_SingletonPattern.origin.Singleton;

/**
 * @Author 竹心
 * @Date 2023/8/5
 **/

public class Singleton3 {

    //用双重检查加锁减少使用同步,降低开销

    private volatile static Singleton3 uniqueInstance;
    //volatile保证uniqueInstance为单实例类的时候多个线程正确处理

    private Singleton3(){}

    public static Singleton3 getInstance(){
        if(uniqueInstance == null){
            synchronized (Singleton3.class){
                if(uniqueInstance == null){//进入同步区块后,再检查一次
                    uniqueInstance = new Singleton3();
                }
            }
        }
        return uniqueInstance;
    }
}
Notes:
单件模式:
    确保一个类只有一个实例,并提供一个全局的访问点

到了这里,关于《HeadFirst设计模式(第二版)》第五章代码——单例模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 《HeadFirst设计模式(第二版)》第九章代码——迭代器模式

            一家早餐店和一家午餐点准备合并在一起,两家的点菜的菜单实现方式如下:         首先,他们的菜单选项都基于同一个类: 菜单选项类 早餐店初始菜单 午餐店初始菜单: 可以得知:前者使用List来实现,后者使用数组来实现。 这时候,如果不采取任何方法加以

    2024年02月12日
    浏览(12)
  • 《HeadFirst设计模式(第二版)》第十一章代码——代理模式

    《HeadFirst设计模式(第二版)》第十一章代码——代理模式

    代码文件目录:  RMI: MyRemote MyRemoteClient MyRemoteImpl 能够远程监控的糖果机: 在上一章的代码的基础上做一些修改 GumballMachine GumballMachineRemote GumballMachineTestDrive GumballMonitor GumballMonitorTestDrive 五个状态类: 同样的修改:

    2024年02月12日
    浏览(20)
  • 《HeadFirst设计模式(第二版)》第八章代码——模板方法模式

    《HeadFirst设计模式(第二版)》第八章代码——模板方法模式

    代码文件目录:   CaffeineBeverage Coffee Tea notes

    2024年02月12日
    浏览(12)
  • 《python语言程序设计基础》(第二版)第五章课后习题参考答案

    第五章 函数和代码的复用 5.1 改造练习题3.5,输出更大的田字格 5.2 实现isOdd函数 5.3 实现isNum函数 5.4 实现multi函数 5.5 实现isPrime函数 5.6 输出10种生日日期格式 代码一: 代码二: 5.7 汉诺塔 注:上述代码仅供参考,若有问题可在评论区留言!

    2024年02月01日
    浏览(13)
  • 【设计模式】第十五章:责任链模式详解及应用案例

    【设计模式】第十五章:责任链模式详解及应用案例

    【设计模式】七大设计原则 【设计模式】第一章:单例模式 【设计模式】第二章:工厂模式 【设计模式】第三章:建造者模式 【设计模式】第四章:原型模式 【设计模式】第五章:适配器模式 【设计模式】第六章:装饰器模式 【设计模式】第七章:代理模式 【设计模式

    2024年02月13日
    浏览(16)
  • 《微服务架构设计模式》第二章

    《微服务架构设计模式》第二章

    软件架构的定义 看一下大佬是怎么说的: 计算机系统的软件架构是构建这个系统所需要的一组结构,包括软件元素、它们之间的关系以及两者的属性。 --Bass等著《Documenting Software Architectures:Views and Beyond》 这个定义将软件分解为元素和元素之间的关系两个部分,就像一辆汽车

    2024年02月09日
    浏览(14)
  • 二十三种设计模式第二十篇--备忘录模式

    二十三种设计模式第二十篇--备忘录模式

    备忘录模式,备忘录模式属于行为型模式。它允许在不破坏封装的情况下捕获和恢复对象的内部状态。 保存一个对象的某个状态,以便在适当的时候恢复对象,该模式通过创建一个备忘录对象来保存原始对象的状态,并将其存储在一个负责管理备忘录的负责人对象中。 备忘

    2024年02月14日
    浏览(13)
  • 二十三种设计模式第二十四篇--访问者模式(完结撒花)

    二十三种设计模式第二十四篇--访问者模式(完结撒花)

    在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法。 通过这种方式,元素的执行算法可以随着访问者改变而改变。 这种类型的设计模式属于行为型模式。根据模式,元素对象已接受访问者对象,这样访问者对象就可以处理元素对象上的

    2024年02月14日
    浏览(14)
  • 《微服务架构设计模式》第二章 服务的拆分策略

    《微服务架构设计模式》第二章 服务的拆分策略

    内容总结自《微服务架构设计模式》 软件架构的定义:计算机系统的软件架构是构建这个系统所需要的一组结构,包括软件元素、他们之间的关系以及两者的属性(Bass等著) 其实质是应用程续的架构将软件分解为元素(element)和这些元素之间的关系(relation)。由于这两个

    2024年02月09日
    浏览(16)
  • (数字图像处理MATLAB+Python)第五章图像增强-第二节:基于直方图修正的图像增强

    (数字图像处理MATLAB+Python)第五章图像增强-第二节:基于直方图修正的图像增强

    基于直方图修正的图像增强 :是一种常见的图像处理方法。该方法通过对图像的像素值分布进行调整,以改善图像的对比度和亮度等视觉效果。具体地,直方图校正方法将图像的像素值转换为一个新的值域范围,使得像素值的分布更加均匀,从而增强图像的细节和对比度。这

    2023年04月19日
    浏览(56)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包