静态方法和属性的经典使用-单例设计模式

news2024/11/22 15:48:50

单例设计模式

  • 一、设计模式
  • 二、单例模式
    • 1、饿汉式
    • 2、懒汉式
    • 3、区别

单例设计模式是静态方法和属性的经典使用。

一、设计模式

设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式。设计模式就像是经典的棋谱,不同的棋局,我们用不同的棋谱,免去我们自己再思考和摸索。

二、单例模式

单例:单个的实例

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

1、饿汉式

步骤
(1) 构造器私有化 =>防止直接new对象
(2) 类的内部创建静态对象(new)
(3) 向外暴露一个静态的公共方法getlnstance。
(4) 代码实现

public class SingleTon01 {
    public static void main(String[] args) {
        Wife instance = Wife.getInstance();
        System.out.println(instance);
    }
}
//有一个类,Wife
// 只能有一个Wife
class Wife{
    private String name;

    private static Wife wf = new Wife("xiaohong");
    //构造器私有化
    private Wife(String name) {
        this.name = name;
    }

    //这里使用static:这个类不能创建对象,无法调用对象方法,只能调用static方法
    //这个方法不是静态的,就必须new一个对象,访问非静态方法
    public static Wife getInstance() {
        return wf;
    }

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

在这里插入图片描述
饿汉式,有可能没使用这个实例,就创建好了。private static Wife wf = new Wife(“xiaohong”); 是静态变量,在类加载的时候就已经创建好了。这种对象通常是重量级的对象。可能造成创建了对象但是没有使用,所以会使资源浪费。

懒汉式,使用这个实例的时候再创建。

2、懒汉式

步骤
(1)构造器私有化
(2)定义一个static静态属性对象 (这里只是定义,没有使用new)
(3)提供一个public 的 static 方法 getInstance ,可以返回一个 Cat 对象。在此方法中才 new
(4)懒汉式:只有当用户使用 getInstance 时,才返回 cat 对象。后面再次调用时,会返回上次创建的对象。

//程序运行过程中,只能养一只猫
class Cat {
    private String name;
    private static Cat cat;

    private Cat(String name) {
        this.name = name;
    }

    public static Cat getInstance() {
        if(cat == null) {
            cat = new Cat("kitty");
        }
        return cat;
    }

}

3、区别

  1. 二者最主要的区别在于创建对象的时机不同:饿汉式是在类加载就创建了对象实例,而懒汉式是在使用时才创建。
  2. 饿汉式不存在线程安全问题,懒汉式存在线程安全问题。(后面学习线程后,会完善)
  3. 饿汉式存在浪费资源的可能。因为如果程序员一个对象实例都没有使用,那么饿汉式创建的对象就浪费了,懒汉式是使用时才创建,就不存在这个问题。
  4. 在我们 javaSE标准类中,java.lang.Runtime 就是经典的单例模式。
    (Runtime 源码,饿汉式)
    在这里插入图片描述

本笔记是对韩顺平老师的Java课程做出的梳理。方便本人和观看者进行复习。
课程请见: https://www.bilibili.com/video/BV1fh411y7R8/?spm_id_from=333.999.0.0&vd_source=ceab44fb5c1365a19cb488ab650bab03

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1259100.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uniapp基础-教程之HBuilderX基础常识篇02

uniapp创建项目时属性多为vue后缀;其中每个文件中都包含了三段式结构分别是template;script;style形势,分别是前端显示的画面以及js和css样式。 template:说大白话就是给别人看的,我们打开页面就可以看到的…

程序员必备的学习工具,建议收藏!

作为一名刚入门的程序员,选择合适的开发工具可以提高工作效率,加快学习进度。在一个劳动力追求高性价的时代, 我们无时无刻不在追寻更高的工作学习效率,在本文中,我将向您推荐一些常用的好用工具。 01 搜索资源网站 学习技术过程…

软件测试中设定优先级、做好风险管理很重要

一、为什么重要? 1. 资源有限 测试资源如时间、人员、设备等总是有限的,确定优先级可以确保最重要的功能得到足够的关注和资源投入。 2. 提高效率 通过优先测试最关键的功能和最有可能出错的区域,更快地发现和修复重大缺陷,从…

idea无法识别jsp以及注释和格式化快捷键都无效

将下面的插件打开,idea便能识别jsp文件,并且能进行注释和格式化。

SDX12 定制使能secboot方法

SDX12 定制使能secboot方法 1. 镜像签名列表2 证书制作步骤3. 客制化秘钥证书4 调试验证 主要介绍SDX12平台定制秘钥使能secboot的具体操作流程和注意事项。 1. 镜像签名列表 如下表所示,表中是软件版本中的所有镜像并标出哪些镜像需要签名。 序号镜像文件是否签名…

数塔问题【java】

[实验题目3] 使用动态规划法解决数塔问题。 问题描述:从数塔的顶层出发,在每一个结点可以选择向左走或向右走,一直走到最底层,要求找出一条路径,使得路径上的数值和最大。 一个示例: 核心思想&#xff1…

高清gif表情包怎么做?这个方法赶快学起来

在现在这个快节奏的互联网时代,人们在观看视频、图片等也不满足于传统的长视频、长图了。开始流行起来gif动图,将视频、图片等做成有动态效果的图片,通过一张图片传递丰富的信息。接下来,给大家分享一款制作gif图在线(…

棕榈酰三肽-5——抑制肌肤炎症,紧致滋润肌肤

棕榈酰三肽-5 皮肤老化简介 皮肤的自然老化导致细胞外基质蛋白(例如胶原蛋白、纤连蛋白、弹性蛋白和层粘连蛋白)的产生减少和降解增加。细胞外基质除了提供结构支持外,还影响细胞行为,例如分化和增殖。这些功能是通过细胞外基质蛋…

科技与教育:未来教育的新趋势

在21世纪,科技的快速发展正在深刻地改变教育行业。从在线学习平台到虚拟现实教室,科技为教育带来了革命性的变化。本文将探讨科技如何影响现代教育,并预测未来教育的发展趋势。 一、科技在教育中的应用 在线学习平台:通过平台如C…

PCB板的固螺丝孔连接电阻电容有什么好处

PCB板的固螺丝孔连接电阻电容有什么好处 并联高压电容和大电阻作用好处个人经历看法 并联高压电容和大电阻 我们经常会看到一些系统设计中将PCB板的地(GND)与金属外壳(EGND)之间通常使用一个高压电容C1(1~100nF/2KV)并联一个大电阻R1(1M&…

XmlRPC协议详解(一款不支持原生异步请求的协议)

XmlRPC协议详解 文章目录 XmlRPC协议详解什么是RPC?什么是XmlRPC?XmlRPC详解请求示例响应示例错误响应示例参数的数据类型 结束语 什么是RPC? RPC(远程过程调用)是一种用于实现分布式系统中不同进程或不同计算机之间通…

AIGC系列之:Variational Auto Encoder-VAE模块

目录 1.VAE 概述 2.概率分布 3.损失函数 4.重参数技巧 5.维度对 VAE 的影响 6.损失函数对VAE的影响 7.总结 VAE原始https://arxiv.org/abs/1312.6114 论文解读:https://mp.weixin.qq.com/MzI1MjQ2O 1.VAE 概述 变分自动编码器(Variational auto…

常见草本植物(贵州省):023金茅、白茅、黄茅、蒲公英、地果、蕨、铁芒萁

摘要:本专栏树种介绍图片来源于PPBC中国植物图像库(下附网址),本文整理仅做交流学习使用,同时便于查找,如有侵权请联系删除。 图片网址:PPBC中国植物图像库——最大的植物分类图片库 一、金茅 …

Zabbix 6.0 详细基础介绍

目录 一、如何选择自己的运维监控平台 1.1 常用的开源运维监控工具 1.1.1 Cacti 1.1.2 Nagios 1.1.3 Ganglia 1.1.4 Centreon 1.1.5 Grafana 1.1.6 Prometheus 1.1.7 Zabbix 1.2 监控工具选型经验 1.2.1 中小企业传统监控选择 Zabbix 1.2.2 云原生监控选择 Prometh…

快速排序算法,这么写打败95%的程序员

1960年,英国计算机科学家霍尔提出了一种高效的排序算法——快速排序。其核心思想是选定一个基准元素,将需排序的数组分割成两部分。其中一部分都比基准元素小,另一部分都比基准元素大。接着对这两部分分别进行快速排序,最后通过递…

大导演王晶进军短剧,小程序短剧质量再上一层,短剧小程序的

在2023年11月26号,大导演王晶在横店进行开机仪式,短剧《亿万傻儿子》开拍,该短剧题材为都市、男频。 目前短剧是比较热门,大导演王晶拍摄短剧可谓是将短剧的质量提高一个层次。 侧面反映了短剧已经是非常广泛了。后续发展就是哪家…

Python基础语法之学习数据转换

Python基础语法之学习数据转换 一、代码二、效果 一、代码 #数字转换成字符串 num_str str(11) print(type(num_str))#字符串转整数 numint("11") print(type(num),num)#浮点数转整数 float_num int(11.1) print(type(float_num),float_num)#整数转浮点数 num_flo…

【问题总结】Cache的有效位和修改位有什么区别?

以下是大神的理解: ref:https://blog.csdn.net/weixin_45415929/article/details/128152542 有效位:表示一个块是否在Cache中。(eg:当电脑开机时,Cache一定是空的,因此有效位是0。) 修改位&…

10.索引

一.索引简介 索引用于快速找出在某个列中有一特定值的行。 不使用索引,MySQL必须从第1条记录开始读完整个表,直到找出相关的行。表越大,查询数据所花费的时间越多。 如果表中查询的列有一个索引,MySQL能快速到达某个位置去搜寻…