首页 > 其他分享 >单例设计模式的懒汉式和饿汉式以及它们的区别

单例设计模式的懒汉式和饿汉式以及它们的区别

时间:2024-08-01 11:25:01浏览次数:16  
标签:饿汉 Singles Single static 单例 设计模式 懒汉

单例模式:也叫单子模式,属于“创建模式”

一个类只有一个实例,并且自行实例化并向整个系统提供这个实例,这个类称为单例类。

单例类一个最重要的特点:类的构造方法是私有的。

何时使用:系统全局有且只有一个实例。

单例模式的懒汉式:

public class Single {
    //需要将变量定义成全局变量,这样不会再方法调用完直接销毁,使用static原因是静态方法中不能直接调用非静态属性
    private static Single single = null;//属性私有化防止在外部赋值为null
    //构造方法私有化,让其在类的外部一个对象都不能创建
    private Single(){}
    //我们可以类的内部创建对象,通过方法返回
    //因为类的外部不能创建对象,所以只能选泽静态方法进行返回对象
    public static Single getSingle(){
        //Single single = new Single();
        if(single == null){
            single = new Single();
        }
        return single;
    }
}

单例设计模式的饿汉式:

public class Singles {
    private static Singles singles = new Singles();
    private Singles(){}
    public static Singles getSingles(){
        return singles;
    }
}

两种方式的区别:

懒汉式饿汉式
效率

懒汉式每次执行方法的时候都要做出判断所以懒汉式的效率没有饿汉式高。
内存饿汉式在类加载的时候就会直接将对象创建出来,但此时可能不会直接使用,而懒汉式会在需要使用的时候才创建对象,所以相对而且懒汉式比饿汉式占用内存少。

标签:饿汉,Singles,Single,static,单例,设计模式,懒汉
From: https://blog.csdn.net/G123356/article/details/140842568

相关文章

  • 从扫描的 pdf 中提取设计模式
    我有一份大约650页的扫描版pdf。每页都包含一些图案(花朵、几何图案等)。我的目标是从pdf中提取这些模式。供您参考,这是pdf中的一页我当前的解决方案涉及使用opencv检测轮廓并提取图案。但是,该解决方案并不能处理所有情况。该pdf每页包含不同数量的图像,并且......
  • 设计模式-适配器模式( Adapter Pattern)
    设计模式-适配器模式(AdapterPattern)  概要   记忆关键词:转换,兼容接口  定义:将一个类的接口转换成客户希望的另外一个接口,适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。  分析:在适配器模式中,Cilent调用Adapter以获得相应功能,Adapter扩......
  • 设计模式-外观模式(Facade)
    设计模式-外观模式(Facade)  概要   记忆关键词:对外统一接口  定义:为了是复杂的子系统更容易被使用,应当为子系统的众多接口提供一个简洁的高层接口。  分析:外观模式是一种结构型模式,它为子系统的众多接口提供了统一的高层接口,是子系统更容易使用。  外观模式结......
  • 设计模式 单例模式
    双重检查锁packagecom.fh.design_mode.singleton.double_check_lock;importlombok.SneakyThrows;importjava.util.concurrent.TimeUnit;/***双重检查锁*/publicclassSingletonTest{publicstaticvoidmain(String[]args){for(inti=1;i......
  • 设计模式 - 简单工厂模式(Simple Factory Pattern)
    设计模式-简单工厂模式(SimpleFactoryPattern)  概要  记忆关键字:工厂类创建对象  定义:通过工厂类创建对象,并且根据传入参数决定具体子类对象的做法,就是简单工厂模式  分析:如果一个类的实例需要在许多地方被创建和初始化,而初始化的代码也比较复杂。此时可以考虑......
  • 单例模式
    单例模式usingSystem;namespaceSingletonPattern{///<summary>///单例模式基类///</summary>///<typeparamname="T">要实现单例模式的类类型</typeparam>publicabstractclassSingletonBase<T>whereT:Singleton......
  • 单例模式
    类只实例化一次,即在服务中只有一个实例。 1、使用场景节省内存空间,比如配置信息类;单例模式可以用来管理一些共享资源,比如数据库连接池,线程池;解决资源冲突问题,比如日志打印。2、实现方式2.1饿汉(线程安全)初始化时就创建实例2.2懒汉(线程不安全)需要时才创建实例2.3注解......
  • PHP单例模式详解及应用
    本文由ChatMoney团队出品在PHP开发中,我们经常会遇到一些对象需要在整个应用程序中共享的情况。例如,数据库连接、缓存等资源。这时候,我们可以使用单例模式来确保这些资源只被创建一次,并且在程序的任何地方都可以访问到。什么是单例模式?单例模式(SingletonPattern)是一种设计模......
  • 框架升级之单例模式及统一异常处理
    单例模式单例模式(SingletonPattern)是一种常用的软件设计模式,它的主要目的是确保一个类仅有一个实例,并提供一个全局访问点来获取这个实例。单例模式在很多场景下都非常有用,比如配置文件读取、数据库连接、线程池等。使用单例模式改造数据库连接功能1.加载配置数据数据库配......
  • 【设计模式】代理模式详解
    1.简介代理模式是常用的Java设计模式,该模式的特点是代理类与委托类共享相同的接口。代理类主要负责预处理消息、过滤消息、将消息转发给委托类,并在事后处理消息等。代理类与委托类之间通常存在关联关系,一个代理类对象与一个委托类对象关联。代理类对象本身不真正实现服务,而......