Java设计模式之单例模式_Demo

2023-10-26

单例模式

  1. 初识:

    单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。

    这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

    这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。

    这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

  2. 注意:

    • 单例类只能有一个实例。

    • 单例类必须自己创建自己的唯一实例。

    • 单例类必须给所有其他对象提供这一实例。

知识透析

  1. 意图:

    保证一个类仅有一个实例,并提供一个访问它的全局访问点。

  2. 主要解决:

    一个全局使用的类频繁地创建与销毁。

  3. 何时使用:

    当您想控制实例数目,节省系统资源的时候。

  4. 如何解决:

    判断系统是否已经有这个单例,如果有则返回,如果没有则创建。

  5. 关键代码:

    构造函数是私有的。

  6. 应用实例:

    • 一个班级只有一个班主任。

    • Windows 是多进程多线程的,在操作一个文件的时候,就不可避免地出现多个进程或线程同时操作一个文件的现象,所以所有文件的处理必须通过唯一的实例来进行。

    • 一些设备管理器常常设计为单例模式,比如一个电脑有两台打印机,在输出的时候就要处理不能两台打印机打印同一个文件。

  7. 优点:

    • 在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例(比如管理学院首页页面缓存)。

    • 避免对资源的多重占用(比如写文件操作)。

  8. 缺点:

    没有接口,不能继承,与单一职责原则冲突,一个类应该只关心内部逻辑,而不关心外面怎么样来实例化。

  9. 使用场景:

    • 要求生产唯一序列号。

    • WEB 中的计数器,不用每次刷新都在数据库里加一次,用单例先缓存起来。

单例实现

创建一个 SingleObject 类。

SingleObject 类有它的私有构造函数和本身的一个静态实例。

SingleObject 类提供了一个静态方法,供外界获取它的静态实例。

使用 SingleObject 类来获取 SingleObject 对象。

在这里插入图片描述

创建一个 Singleton 类

/**
 * 单例模式
 * @Author Hateyes
 * @Date 2020-07-24 16:44
 */
public class SingleObject {

    //创建 SingleObject 的一个对象
    private static SingleObject instance = new SingleObject();

    //让构造函数为 private,这样该类就不会被实例化
    private SingleObject(){

    }

    //获取唯一可用的对象
    public static SingleObject getInstance(){
        return instance;
    }

    public void showMessage(){
        System.out.println("Hello World!");
    }
}

从 singleton 类获取唯一的对象

/**
 * Java 设计模式之单例模式
 * @Author Hateyes
 * @Date 2020-07-24 16:54
 */
public class SingletonPatternDemo {

    public static void main(String[] args) {

        //不合法的构造函数
        //编译时错误:构造函数 SingleObject() 是不可见的
        //SingleObject object = new SingleObject();

        //获取唯一可用的对象
        SingleObject object = SingleObject.getInstance();

        //显示消息
        object.showMessage();
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java设计模式之单例模式_Demo 的相关文章

随机推荐

  • 逆向爬虫23 Javascript基础进阶

    Javascript基础进阶 一 JS中的常用功能介绍 非交互 1 1 定时器 在JS中 有两种设置定时器的方案 语法规则 t setTimeout 函数 时间 经过xxx时间后 执行xxx函数 5秒后打印我爱你 t setTimeout
  • 我理解的分类、目标检测、目标识别、目标定位、目标跟踪

    分类 判断一张图片是什么类别 不需要给出物体的位置信息 目标检测 找到图中所有的目标和它们的位置 可能有多个目标 目标识别 输出一张图片中是不是包含目标 单个目标 目标定位 输出目标的确切位置 单个目标 举个例子 检测画面中是否包含某个品牌
  • VUE中动态改变字体大小

    VUE中动态改变字体大小 父组件将自己的数据传递送给子组件展示 子组件监听click操作 emit发送出去 父组件监听通过emit发送的信息 改变控制字体大小的postFontSize 通过style展示
  • 4.2用Effect实现多纹理化效果

    4 2用Effect实现多纹理化效果 前面我们介绍了一个使用像素着色器实现的多纹理化 这里用Effect框架重新给于实现 读者可以比较两者之间的异同 体会Effect框架给我们带来了哪些方面的改善 4 2 1着色器 下面是着色器代码 该代码
  • sqlmap的用法,sqlmap -r

    sqlmap结合burpsuit进行sql注入漏洞查找 配置好burpsuit和浏览器之间的代理 网上方法很多 创建一个记事本 准备写入参数使用 1 在sqlmap根目录下创建list txt 你也可以在其他地方创建 待会写上目录就行 2
  • Mysql 数据库介绍

    目录 数据库 1 数据库的介绍 2 数据库的分类 3 数据库的作用 4 数据库特点 5 小结 关系型数据库管理系统 1 关系数据库管理系统的介绍 2 SQL的介绍 3 小结 MySQL数据库 1 MySQL数据库的介绍 数据库 1 数据库的
  • python引用、浅拷贝、深拷贝

    在python中 对象的赋值往往是通过 进行的 但是由于 右边的类型方式不一样 所以产生变量虽然值相同 但是在内存中的地址值不同 可能会造成内存空间的浪费 如题所示 对象赋值中存在三种类型情况的赋值 引用赋值 引用赋值l2 l1 首先创建个
  • vue3中的reactive函数声明数组

    vue3中reacitve函数如何声明一个响应式数组 如以下案例
  • 2021最新 阿里云搭建饥荒专用服务器

    前几天我一朋友在steam上邀请我一起玩饥荒 可是联机的时候 总是一卡一卡的 好不容易玩的正尽兴的时候 我朋友突然有事就离开了房间 好不容易打的怪 建的家 房主一退就不能再次玩了只能等待他回来 针对这样个的问题 我决定自己搭建饥荒的专有服务
  • 【matlab】:matlab中如何三维画球?

    首先介绍一个函数ellipsoid 这个函数是在三维立体空间画椭圆用的 这个函数参数如下 ellipsoid x y z x1 y1 z1 x y z代表了椭球的中心 x1 y1 z1代表了x y z方向的分量 然后如果是要画球的话 把这三
  • HTML5+CSS3小实例:简单又好看的加载动画效果

    HTML5 CSS3做一个简单又好看的加载动画效果 一个三色圆环转动 再加圆环内部文字转动 效果虽然简单 但第一次看到还是很惊艳的 最主要一点 代码真的超简单的 效果 源码
  • 曲线拟合

    问题解决 给你一个二维的序列 你如何用多项式进行曲线拟合 一阶直线拟合 二阶抛物线拟合 并非阶次越高越好 看拟合情况而定 曲线拟合 clear clc syms s 声明一个符号变量 详细参考 https jingyan baidu com
  • PicoDet代码学习记录

    推理步骤 picodet s 320 coco yml Infer py main gt run Trainer py init self model create cfg architecture Picodet py from conf
  • Ubuntu20.04 中已经安装 Pytorch 但 Import 报错 - 解决记录

    01 问题描述 笔者使用的是 Ubuntu 20 04 3 LTS 在使用 PyTorch 训练模型的时候 torch 模块引用失败 报错信息是 OSError home wang local lib python3 8 site pack
  • CUDA学习笔记——cudaDeviceSynchronize()的理解

    内核是操作系统提供软件对计算机硬件进行访问的软件 内核启动是异步的 这意味着在内核完成执行之前 他将在启动gpu进程后立即将控制权返回给cpu线程 而cpu线程的下一步是应用程序的退出 在应用程序退出时 其将输出发送到标准输出的功能由操作系
  • 会议论文和期刊论文在写作上有什么区别?有什么侧重点?

    作为一名科研工作者 无论你是初入圈内的 小萌新 还是久经沙场的 老将 写论文都是我们的必经之路 而要想论文投中 就需要我们的积极努力啦 其中 杂志社以及很多大型学术会议的征稿就是很好的一个途径哦 不过这两者的论文要求是否一致呢 又是否匹配我
  • cocos2d之Box2D详解 鼠标关节实现

    cocos2d之Box2D详解 鼠标关节实现 DionysosLai2014 5 7 我们经常要移动物理世界中的某个物体 比方说石头 木块等 如果我们直接改变这些物体的位置 让这些物体跟随我们手指移动 即使这样是可行的 却违反了物理世界的基
  • Ubuntu16.04下安装Android机顶盒(Android4.4.2)NDK交叉编译环境

    Ubuntu16 04下安装Android机顶盒 Android4 4 2 NDK交叉编译环境 文章目录 Ubuntu16 04下安装Android机顶盒 Android4 4 2 NDK交叉编译环境 一 前言 二 ndk下载 三 ndk安
  • 拦截器响应头中配置“Access-Control-Expose-Headers”实现跨域请求暴露token

    问题场景 和前端同事联调接口中 前端同事反映说在跨域请求的情况下无法获取token的值 后来找到解决办法 解决 1 在登录拦截器处理类中的响应对象 把token对象暴露出来即可 2 关键代码 response setHeader Acces
  • Java设计模式之单例模式_Demo

    单例模式 初识 单例模式 Singleton Pattern 是 Java 中最简单的设计模式之一 这种类型的设计模式属于创建型模式 它提供了一种创建对象的最佳方式 这种模式涉及到一个单一的类 该类负责创建自己的对象 同时确保只有单个对象被