【Java基础】设计模式——单例设计模式

ops/2024/9/25 4:32:57/

单例设计模式(Singleton Design Pattern)是一种创建型设计模式,它确保⼀个类有且只有⼀个实例,并提供一个全局访问点来访问这个唯一实例。

单例模式主要解决的是,⼀个全局使⽤的类频繁的创建和消费,从⽽提升整体的代码性能。

思路

  1. 让构造方法不能被外界使用,在类内部创建对象:将构造方法修饰为private
  2. 把构造方法修饰为private,一个对象都不能创建了
    私有的在本类中可以使用,所以在本类中创建一个对象
  3. 为了让外界能够获取到这个对象,需要把该对象修饰为static
    但是外界可以赋不合法的数值,所以再修饰为private
  4. 对象被修饰为private的,外界就得不到这个对象了。
    所以需要提供public的方法把该对象返回。
    因为外界不能创建对象,所以该方法只能是静态的。
java">class Single//饿汉式
{private static Single single=new Single();private Sing1e(){}public static Single getInstance(){return single;}
}
class Singles//懒汉式:线程不安全
{private static Singles s;//nullprivate Singles(){};public static Singles getInstance(){if(s==null)s=new Singles();return s;}
}
class Demo9
{public static void main(String[] args){//Single s=new Single();//Single.single=null;Single s1=Single.getInstance();Single s2=Single.getINstance();System.out.println(s1==s2);}
}
  • e.g.: 工厂加工零件,工厂实现单例

    java">class Factory
    {private int num;private static Factory factory=new Factory();private Factory(){}public static Factory getInstance(){return factory;}public void jiaGong( ){System.out.println("这是加工的第"+(++num)+"个零件");
    }
    class Demo10
    {public static void main(String[] args){Factory gc=Factory.getInstance();gc.jiaGong();gc.jiaGong();gc.jiaGong();gc.jiaGong();gc.jiaGong();Factory gc2=Factory.getInstance();gc2.jiaGong();gc2.jiaGong();gc2.jiaGong();gc2.jiaGong();gc2.jiaGong();}
    }
    

在这里插入图片描述


http://www.ppmy.cn/ops/34456.html

相关文章

2010NOIP普及组真题 2. 接水问题

线上OJ: 一本通:http://ybt.ssoier.cn:8088/problem_show.php?pid1950 解法一、朴素模拟 核心思想: 朴素模拟: 1、先给每个b[i]水龙头分配一个人a[i],b[i] 表示水龙头的剩余时间。同时标记该水龙头为 used 使用中 2…

React 之 使用 ref 引用值(七)

当你希望组件“记住”某些信息,但又不想让这些信息 触发新的渲染 时,你可以使用 ref 。 //通过从 React 导入 useRef Hook 来为你的组件添加一个 ref import { useRef } from react;export default function Counter() {//在组件内,调用 useR…

c语言排序算法之五(插入排序)

前言 以下内容是被验证可以有效理解插入排序,代码也较容易理解。如果你发现还有很多需要增加的,欢迎留言。 为什么要单独写排序算法这一系列,看过一些贴子普遍篇幅较长。看完还依旧云里雾里,难以直观理解原理及整个过程。代码永…

科学高效备考AMC8和AMC10竞赛,吃透2000-2024年1850道真题和解析

多做真题,吃透真题和背后的知识点是备考AMC8、AMC10有效的方法之一,通过做真题,可以帮助孩子找到真实竞赛的感觉,而且更加贴近比赛的内容,可以通过真题查漏补缺,更有针对性的补齐知识的短板。 今天我们继续…

Nuxt3 实战 (六):Footer 底部布局

前言 今天开发项目的 Footer 布局&#xff0c;这里我们参考 Nuxt-UI 官网的布局。 需求拆分 准备好域名备案号和 icp 图标底部社交按钮链接或其他链接布局组件开发 Footer 布局 新建 components/AppFooter.vue 文件&#xff1a; <template><footer class"f…

SpringBootWeb创建

创建spring项目 创建SpringBoot工程定义请求处理类运行常见问题java: 无效的源发行版: XXjava: 无法访问org.springframework.web.bind.annotation.RequestMapping类文件具有错误的版本 61.0, 应为 52.0 创建SpringBoot工程 定义请求处理类 RestController public class HelloC…

ffmpeg视频拼接性能测试

视频拼接性能汇总 编号方案并行任务数视频分辨率帧率编码格式cpugpucpu使用率%线程数fps耗时秒视频合并后fps视频合并总时长秒备注1纯cpu11080P25H2644核 i5-7500100136511836732纯cpu11080P25H2644核 i5-7500100434531836733纯cpu11080P25H2644核 i5-7500100834501836734纯cp…

发卡授权盗u 系统源码搭建ZHU16728

2024最新UI发卡盗U/支持多语言/更新UI界面/支持多个主流钱包去除后门板&#xff0c;搭建系统TGaqxm01&#xff0c;最好是部署智能合约后用合约地址来授权包含转账支付页面盗U授权源码。 完美提U&#xff0c;教程包含如何提u 。功能完美。 1.Php静态 2.目录puicta 3.扩sal 4.ss…