首页 > 其他分享 >单例模式

单例模式

时间:2023-06-01 16:23:35浏览次数:32  
标签:People 创建 private 实例 static 模式 单例 public

所谓的单例设计模式,就是采取一定的方法保证在整个软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个获取其对象实例的方法。如果我们要让类在一个虚拟机中只能产生一个对象,我们首先必须将类的构造器的访问权限设置为private,这样,就不能用new操作符在类的外部产生类的对象了,但是,在类的内部依然可以产生该类的对象。因为在类的外部开始还无法得到该类的对象,只能调用类的某个静态方法以返回类内部创建的对象,静态方法只能访问类中的静态变量,所以,指向类内部产生的该类对象的变量也必须定义成静态的。

:::success
单例模式:保证某个类在系统中永远只能创建一个实例
两种形态:饿汉式(先将实例创建好)
懒汉式(等需要的时候再来创建)
:::

1、饿汉式

保证某个类在系统中永远只能创建一个实例
将构造方法私有化,不让外部的类来创建实例

public class EagerSingleton {
    private static final EagerSingleton instance = new EagerSingleton();

    private EagerSingleton() {
        // 私有构造方法
    }

    public static EagerSingleton getInstance() {
        return instance;
    }

    // 其他方法和属性...
}

2、懒汉式

懒汉式:等需要再创建 判断是否为空 为空再创建
不用就不会创建  
好处:节省内存占用

public class LazySingleton {
    private static LazySingleton instance;

    private LazySingleton() {
        // 私有构造方法
    }

    public static synchronized LazySingleton getInstance() {
        if (instance == null) {
            instance = new LazySingleton();
        }
        return instance;
    }

    // 其他方法和属性...
}

3、饿汉式和懒汉式的组合

public class People {

    /**
     * 将或构造方法私有化,不让外部的类来创建实例
     */
    private People() {}

    /**
     * 使用静态内部类来创建一个唯一的外部类实例
     */
    private static class InnerClass {
        //创建一个唯一的外部类实例
        private static final People INSTANCE = new People();
    }
    /**
     * 对外部提供一个公开的方法获取实例
     * @return
     */
    public static People getInstance() {
        //当使用InnerClass时才会加载这个内部类,从而初始化People的实例
        return InnerClass.INSTANCE;
    }

    public void say() {
        System.out.println("Hello world");
    }
}

标签:People,创建,private,实例,static,模式,单例,public
From: https://www.cnblogs.com/s186/p/17449383.html

相关文章

  • 新版idea快捷键总结学习----(用于java开发模式)
    选择代码区ctrlw如果放到以if开头的语句,可以选择if判断条件所在的代码片段游标在单个单词下时选择单词在选中多个单词时,选择整个字符串三次点击时,如果不在字符串单词下,用于选择{}内的代码片段逐级递增如果在单词下方,用于选择单词所在的字符串并且向外逐级扩展。ctrl......
  • 07 Adapter 模式 - Class Adapter
    DesignPattern:Adapter模式-ClassAdapterAdapter模式的另一种作法是ClassAdapter模式,在这个模式下,Adapter直接继承Adaptee(要引进的新类别),以拥有当中的成员及方法,在C++中的话可以这么作: C++中可以多重继承,但在Java中不行,所以在Java中若要采用ClassAdapter,必须作点修改,一方......
  • M2M场景之客户端凭证模式|OIDC & OAuth2.0 认证协议最佳实践系列 【4】
    在前两篇文章中,我们介绍了 OIDC 授权码以及授权码增强的PKCE模式,本次我们将重点围绕(ClientCredentials)模式进行讲解,ClientCredentials模式是OIDC授权模式之一,它是一种用于客户端(应用程序)以自己的名义向OIDC服务端获取访问令牌(accesstoken)的认证授权模式,常用于保护A......
  • golang实现设计模式之构建者模式总结-代码、优缺点、适用场景
    构建者模式也是一种创建型的设计模式,该模式将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的对象。大白话就是,构建者模式,从输出角度看依然是创建个对象实例,但是构建者模式更关注创建的细节,或者说一个对象的创建可以拆分为多个步骤,所有的步骤完成才创建出这个对......
  • 模板方法模式
    一、定义定义一个操作中的算法的框架,而将一些步骤延迟到了子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些步骤。二、实例来一个经典的脑筋急转弯。把一个大象装进冰箱要几个步骤?然后把一个长颈鹿装进冰箱要几个步骤?三、UML类图  四、钩子函数钩子......
  • FTP搭建及内网穿透(Windows环境)、两种(主动、被动)模式
    有两种方法一、使用IIS搭建FTP需要注意的是被动端口设置完后要重启一下【MicrosoftFTPService】服务才能生效Windows系统IIS搭建FTP服务如何配置被动端口?1、打开IIS管理器,点击左侧的服务器,进入服务器设置主页找到 FTP功能 中的 FTP防火墙支持 点击进入2、在数据通道端......
  • Go设计模式
    Go-设计模式整理参考:Go设计模式24-总结(更新完毕)-Mohuishou(lailin.xyz)go设计模式实现,包含23种常见的设计模式实现设计模式学习的重点是什么?设计原则,以及设计模式的使用场景和优缺点,实现相对来说还没有那么重要如果是常见的设计模式是武术招式,那么设计原则就是内......
  • 命令模式学习
    命令模式通过将请求封装成Command对象实现了请求的调用者和请求的执行者之间的解耦,并且可以很方便的实现请求排队,日志记录,命令撤销等操作。这里边比较经典的一个功能就是通过命令模式可以把已经执行的命令记录下来,轻松的实现命令的回退,重做这些操作,类似在文本编辑器中的操作......
  • 授权码 + PKCE 模式|OIDC & OAuth2.0 认证协议最佳实践系列【03】
    在上一篇文章中,我们介绍了 OIDC 授权码模式(点击下方链接查看),本次我们将重点围绕授权码+PKCE模式(AuthorizationCodeWithPKCE)进行介绍,从而让你的系统快速具备接入用户认证的标准体系。OIDC&OAuth2.0认证协议最佳实践系列02-授权码模式(AuthorizationCode)接入Authing......
  • 单例模式
    单例模式(反射破坏-枚举)饿汉式单例packagecom.jan.single;//饿汉式单例publicclassHungry{//一上来就会加载好,可能会浪费空间privatebyte[]data11=newbyte[1024*1024];privatebyte[]data12=newbyte[1024*1024];privatebyte[]data13=newbyte[......