设计模式 学习笔记1 单例

DesignPattern 设计模式学习笔记(面试和工作必备) 最近有很多粉丝留言:“学设计模式有什么用啊,好像我工作中都用不到设计模式,但每次面试都要问实际项目中使用了哪些设计模式,我都答不上来。” 面对这样的问题,我想说设计模式真的很重要。曾经我也认为学设计模式没什么用,但用过了都说好。所以,猿人花了一个星期的时间给大家整理了最常用的设计模式,通过源码和文档的形式分享给大家。 希望大家认真学习掌握,真正学以致用。不仅面试时要对答如流,实际工作中也要加以应用,这样能力才会得到提升。 一、设计模式介绍 设计模式(Design pattern)代表了最佳的实践,通常被有经 阅读详情

设计模式 单例

 

单例(Singleton)模式的定义:指一个类只有一个实例,且该类能自行创建这个实例的一种模式。

 

单例模式有 3 个特点:

单例类只有一个实例对象;

该单例对象必须由单例类自行创建;

单例类对外提供一个访问该单例的全局访问点;

 

有两种实现形式

 

第一种 懒汉式单例

该模式的特点是类加载时没有生成单例,只有当第一次调用 getlnstance 方法时才去创建这个单例。

public class LazySingleton {

    private static volatile LazySingleton singleton = null; //保证 singleton 在所有线程中同步

    private LazySingleton() {} //private 避免类在外部被实例化

    public static synchronized LazySingleton getInstance()

    {

        //getInstance 方法前加同步

        if(singleton==null)

        {

        singleton=new LazySingleton();

        }

        return singleton;

    }

}

注意:如果编写的是多线程程序,则不要删除上例代码中的关键字 volatile 和 synchronized,否则将存在线程非安全的问题。如果不删除这两个关键字就能保证线程安全,但是每次访问时都要同步,会影响性能,且消耗更多的资源,这是懒汉式单例的缺点。

 

第二种 饿汉式单例

public class HungrySingleton {

    private static final HungrySingleton hungry=new HungrySingleton();

    private HungrySingleton(){}

    public static HungrySingleton getInstance()

    {

        return hungry;

    }

}

饿汉式单例在类创建的同时就已经创建好一个静态的对象供系统使用,以后不再改变,所以是线程安全的,可以直接用于多线程而不会出现问题。

 

适用的场景的特点。

在应用场景中,某类只要求生成一个对象的时候。

当对象需要被共享的场合。由于单例模式只允许创建一个对象,共享该对象可以节省内存,并加快对象访问速度。如 Web 中的配置对象、数据库的连接池等。

当某类需要频繁实例化,而创建的对象又频繁被销毁的时候,如多线程的线程池、网络连接池等。

 

单例模式可扩展

 

    private static int n = 10;

    private static List<HungrySingleton> hungrySingletonList = new ArrayList<>();

    static {

        for (int i = 0; i < n; i++) {

            hungrySingletonList.add(new HungrySingleton());

        }

    }

    public static HungrySingleton getHungrySingleton() {

        int value = (int) Math.random()*n;

        return hungrySingletonList.get(value);

    }

【文章阅读+代码复现】Point-GNN Brief 在3D点云语义分割方法中,GNN已经做了很多可用的方案,但是在目标检测上依旧是采用比较传统的CNN和稀疏卷积的组合,这一篇文章是研究了图卷积在3D检测的中的用法。来自卡内基梅隆大学。已经被CVPR2020接收. 这里是 paper 这里是 code Abstruct 一个采用GNN设计的3D目标检测框架 过程是先将点云场景编码成图结构,随后设计了一个叫point-GNN的网络结构,在... 阅读详情

相关推荐

FPGA矩阵键盘计算器Verilog实现与Quartus仿真全流程解析

本文详细解析了基于FPGA和Verilog的矩阵键盘计算器实现全流程,包括矩阵键盘扫描、状态机设计、算术运算逻辑及数码管显示驱动。通过Quartus仿真与Testbench测试,确保设计稳定性与准确性,适合数字逻辑设计初学者学习FPGA开发与硬件描述语言应用。

chair的专栏 743

设计模式学习笔记--单例(Singleton)和多例(Multiton)

单例(Singleton)模式一个最重要的特点是类的构造方法是私有的,从而避免了外部利用构造方法直接创建多个实例,同时它是自实例化的;多例模式(Multiton Pattern),实际上就是单例模式的自然推广。

Java之旅 2709

基于FFmpeg与Nginx的大华摄像头实时视频Web接入方案

本文详细介绍了一种基于FFmpeg与Nginx的大华摄像头实时视频Web接入方案。该方案通过FFmpeg将摄像头RTSP协议流转换为浏览器友好的HLS格式,并利用Nginx进行高效分发,最终结合Video.js构建前端播放页面,实现无需插件的跨平台实时监控。方案具有免费、轻量、稳定、易于部署的特点,适合中小企业、个人开发者快速搭建内部监控或展示系统。

weixin_28040125的博客 347

设计模式DesignPattern【1】

设计模式是对于反复出现的问题的解决方案,是关于如何解决某些问题的指南。它们不是可以插入应用程序中的类、包或库。相反,这些是关于如何在某些情况下解决某些问题的指导方针,是一种思想方面的东西。设计模式是软件设计中常见问题的典型解决方案。它们就像预制的蓝图,你可以对其进行自定义以解决代码中反复出现的设计问题。

2301_80272161的博客 1106

浏览器Cookie迁移实战:从Chrome导出导入登录态全攻略

Cookie是浏览器保存的会话凭证,服务端通过Set-Cookie将登录态种在本地。迁移Cookie本质上是把服务端认可的会话标识搬到新环境,从而免去重复输入账号密码和二次验证的麻烦。在换电脑、切浏览器或重装系统时,掌握Cookie的导出导入技术能显著提升效率。Chrome与Edge同属Chromium内核,存储结构相似,但字段差异(如Domain、SameSite、Secure)常导致迁移失败。通过浏览器扩展或CDP脚本可实现跨浏览器登录态迁移,适用于内网后台、开发环境等场景。本文从原理到实践,梳理Coo

weixin_42533120的博客 344

揭秘Synopsys EDA中的AI黑科技:DSO.ai如何改变传统芯片设计流程

本文深入探讨了Synopsys EDA中的AI黑科技DSO.ai如何革新传统芯片设计流程。通过数据驱动的方法论、功耗优化革命和时序收敛智能加速,DSO.ai显著提升了设计效率和质量,实现了从经验驱动到AI驱动的范式转变。文章还提供了实战指南,帮助团队跨越AI EDA的实施鸿沟。

weixin_29296241的博客 527

单例、多例设计模式、枚举 - Java基础知识 16

目录 单例设计 多例设计 学习笔记 单例设计模式与多例设计模式主要是一种控制实例化对象产生个数的设计操作。 单例设计 如果现在有一个程序类该程序类的定义如下: class Singleton{ public void print(){ System.out.println("测试") ; } } public class JavaDemo{ public static void main(String[] args){ Singleton instanceA = new Si

57 336

2.ROS实用工具:坐标变换

本文围绕ROS坐标变换展开,介绍其在机器人系统中的关键作用,即统一不同传感器和执行器坐标系,服务数据融合等操作。基于ROS的tf库,从广播和监听TF变换两方面阐述实现过程,涵盖新建工作包、编写广播和监听代码、配置构建文件及编译等步骤。此外,介绍启动节点管理器后运行广播和监听节点的方法,并通过rqt_graph、rqt_tf_tree、tf_echo等工具可视化和获取坐标系变换信息。借助这些内容,读者不仅能掌握ROS坐标变换的实现,还能对机器人坐标变换系统的调试和理解有更深入认识 。

qq_74168740的博客 1174

2022Java学习笔记三十二(面向对象加强进阶:单例设计模式:饿汉单例,懒汉单例)

2022Java学习笔记三十二(面向对象加强进阶:单例设计模式:饿汉单例,懒汉单例) 一、什么是设计模式 1、设计模式是一套被前人反复使用、多数人知晓、经过分类编目的代码设计经验总结,后来者可以直接拿来解决问题 2、设计模式是软件设计中常见的解决方案,好的设计模式可以进一步的提高代码的复用性 单例设计模式 可以保证系统中,应用模式的这个类永远只有一个实例,即一个类永远只能创建一个对象 单例的实现方式有很多种:目前学习饿汉单例模式 二、饿汉单例设计模式 在用类获取对象的时候,对象已经提前为你创建好了 步骤:

我要记录学习博客 363

小米路由器R1D进阶玩法:MIXBOX工具箱安装与插件管理指南

本文详细介绍了为小米路由器R1D安装MIXBOX工具箱的完整指南。通过开启SSH、执行一键安装脚本,用户可以轻松解锁路由器的进阶功能,如安装离线下载、内网穿透等插件,从而将旧设备转变为强大的家庭网络服务中心。

weixin_29292431的博客 1118

C/C++小宇宙代码(完整代码)

C语言实现小宇宙的完整代码。

AIGC 2524

设计模式学习笔记

保证某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。通过一个工厂类来集中管理对象的创建逻辑,客户端无需直接实例化具体类,实现对象创建与使用的解耦。简单工厂模式是工厂模式的一种。定义了一个创建对象的抽象方法,由子类决定要实例化的类。将对象的实例化推迟到子类。每个子类都可以实现工厂接口以提供具体的对象实例化过程提供了一种创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。抽象工厂模式允许客户端在不指定具体类的情况下,创建一系列的产品对象。

陈暗暗的博客 1149

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

JavaSE中设计模式单例、接口、多态的学习笔记

JavaSE中设计模式单例、接口、多态的学习笔记 这是我学习JavaSE 的第十天,以下是我的学习笔记,欢迎大家指正,一起学习。 作者:兰兴星 编辑:兰兴星 想学更多JavaSE方面的 知识,欢迎关注的我的微信公众号:星悟脑 上一期知识点回顾: 面向对象的三大特性: ​ 封装(属性私有化private,get set方法,命名规则) 提高代码的可读性 ​ 继承 原理(子类父类的关系 extends) 基类的中的方法,构造方法(要保证父类的属性被初始化,所以有默认的super()),重写(拥有同名

weixin_43222853的博客 192

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

黑马程序员 学习笔记——Java 二十三设计模式之单例

----------------------android培训 、java培训、期待与您交流! ---------------------- Java 中解决某一问题最行之有效的方法是设计模式。在java 有二十三中设计模式。今天的笔记是二十三设计模式之 单例。 三个要点:一是某各类只能有一个对象实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例 单例设计模式解决在j

huchuan90的专栏 674

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

《设计模式》学习笔记

定义一个 “对象创建器类” (AbsractFactoryClass),每当我们想要创建一个对象,就先找到一个 AbsractFactoryClass 子类的实例,再调用他的成员函数来实现创建对象的功能。当我们需要整体改变程序中的“风格时”,对 AbsractFactoryClass 进行派生。简而言之,抽象工厂就是对某些类的实例化进行抽象。当我们想要在一个函数中实例化某个对象时,我们可以对这个函数传入一个 Absract Factory 类的引用以指导我们实例化哪个类。

总理同学的编程尝试 1217

学习笔记之单例Singleton

今日鸭汤:白天要好好学习,书里有你不知道的。晚上要好好睡觉,梦里你有你想要的。

chengxuYa的博客 215

【不就是Java设计模式吗】解密单例八种设计模式,带你整理代码思路

单例设计模式,真是打开了新世界的大门,自己总结了单例模式的学习笔记,从代码到自己的思路,最后到每一种方式的小结,相信小伙伴们看了后会有所收获

知识记录 944

Kotlin学习笔记——单例的实现

文章目录前言单例模式单例实现方法 前言     在Kotlin中,不像Java有静态变量和静态方法,那么如何实现单例模式呢?在这片文章中将介绍在Kotlin中如何实现单例模式 单例模式     单例模式(Singleton Pattern)是最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的...

yingaizhu的博客 1121

设计模式学习笔记(1)

本文介绍了三种常见的设计模式:单例模式、工厂模式和抽象工厂模式。单例模式确保类只有一个实例,通过私有构造函数和静态方法实现全局访问,适用于购物车管理等场景。工厂模式分为简单工厂和工厂方法,后者通过抽象工厂和具体工厂分离产品创建逻辑,提高扩展性。抽象工厂模式用于创建相关产品族,如不同风格的家具系列,每个具体工厂生产一组配套产品。这些模式通过封装对象创建过程,提高了代码的可维护性和扩展性。

qq452562499的博客 616

代码块&设计模式(单例)

为什么我不完全主张自学?①平台上的大牛基本上都有很多年的工作经验了,你有没有想过之前行业的门槛是什么样的,现在行业门槛是什么样的?以前企业对于程序员能力要求没有这么高,甚至十多年前你只要会写个“Hello World”,你都可以入门这个行业,所以以前要入门是完全可以入门的。②现在也有一些优秀的年轻大牛,他们或许也是自学成才,但是他们一定是具备优秀的学习能力,优秀的自我管理能力(时间管理,静心坚持等方面)以及善于发现问题并总结问题。

2401_84048179的博客 371

《C++20设计模式》学习笔记---单例模式

单例模式并不完全令人厌恶,但是,如果不小心使用,它们会破坏应用程序的可测试性可可重构性。如果必须使用单例模式,请尝试避免直接使用它(如编写SomeComponent.get().foo()),将其指定为依赖项(例如,作为构造函数的参数),并保证所有依赖项都是从应用程序的某个唯一的位置(例如,控制反转容器)获取或初始化的。

BirdsLife的博客 1631

Javascript 设计模式 单例(1),2024年最新面试必备金句60条

上述单例的写法,会把所有的方法与变量暴露给使用者, 如何设置私有变量或者私有方法。a、采用约定的方式:所有以_开头的方法和变量都是私有变量。/*** 方式一* 采用约定,所有以_开头的变量或者方法为私有变量*/},可以觉得方式1不是自己骗自己么,但是项目嘛,约定由于配置,也是可行的。/*** 方式二*/");})();采用了闭包的方式,很好的实现了私有变量和私有方法的隐藏。

2401_84140628的博客 952

音视频学习笔记——设计模式

✊✊✊🌈大家好!本篇文章主要记录自己在进行音视频学习中,整理的包括单例模式、工厂模式、策略模式、观察者模式等6种相关的设计模式和4种准则的内容重点😇。

君莫笑lucky的博客 1608

Design pattern ——singleton pattern(单例深入研究)

Talk is cheapShowmethecode 个人学习笔记--仅供参考 注册式单例 注册式单例又称为登记式单例,就是将每一个实例都登记到某一个地方,使用唯一的标 识获取实例 注册式单例有两种写法:一种为容器缓存,一种为枚举登记 枚举 package pattern; /** * 注册式单例又称为登记式单例,就是将每一个实例都登记到某一个地方,使用唯一的标 识获取实...

xuedengyong的博客 172
上一篇: 设计模式 学习笔记 前言
下一篇: 设计模式 学习笔记2 原型
puppet113
博客等级 码龄11年 0粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值