设计模式--浅谈

安装Tailscale 如果返回 /usr/bin/tailscale 或类似路径,说明已安装但 sudo 可能找不到它。如果 which tailscale 没有输出,说明安装失败,重新执行安装步骤。Tailscale 的后台服务 tailscaled 必须运行。检查 tailscaled 服务是否运行。检查 tailscale 命令是否存在。 阅读详情

设计模式

设计模式:解决某一类问题最有效的方法。

设计模式主要分三个类型:

1.创建型

2.结构型

3.行为型

java中23种设计模式

一、创建型

1.Singleton(单例模式):保证一个类中有一个实例,并提供一个访问它的全局访问点。

2.Abstract Factory(抽象工厂):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们的具体类。

3.Factory Method(工厂方法):定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory Method使一个类的实例化延迟到了子类。

4.Builder(建造模式):将一个复杂对象的构建与它的表示相分离,使得同样的构建过程可以创建不同的表示。

5.Prototype(原型模式):用原型实例指定创建对象的种类,并且通过拷贝这些原型来创建新的对象。

二、结构型

6.Composite(组合模式):将对象组合成树形结构以表示部分整体的关系,Composite使得用户对单个对象和组合对象的使用具有一致性。

7.Facade(外观模式):为子系统中的一组接口提供一致的界面,Facade提供了高层接口,这个接口使得子系统更容易使用。

8.Proxy(代理模式):为其他对象提供一种代理以控制对这个对象的访问。

9.Adapter(适配器模式):将一类的接口转换成客户希望的另外一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

10.Decorator(装饰模式):动态地给一个对象增加一些额外的职责,就增加的功能来说,Decorator模式相比生成子类更加灵活。

11.Bridge(桥模式):将抽象部分与它的实现部分相分离,使他们可以独立的变化。

12.Flyweight(享元模式):运用共享技术有效的支持大量细粒度的对象,它适合用于当大量物件只是重复因而导致无法令人接受的使用大量内存。

三、行为型

13.Iterator(迭代器模式):提供一个方法,顺序访问一个聚合对象的各个元素,而又不需要暴露该对象的内部表示。

14.Observer(观察者模式):定义对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知自动更新。

15.Template Method(模版方法):定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,Template Method使得子类可以不改变一个算法的结构既可以重定义该算法的某些特定步骤。

16.Command(命令模式):将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化,对请求排队和记录请求日志,以及支持可撤销的操作。

17.State(状态模式):允许对象在其内部状态改变时改变它的行为,对象看起来似乎改变了它的类。

18.Strategy(策略模式):定义一系列的算法,把它们一个个封装起来,并使它们可以互相替换,本模式使得算法可以独立于使用它们的客户。

19.China of Responsibility(职责链模式):使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。

20.Mediator(中介者模式):用一个中介对象封装一些列的对象交互。

21.Visitor(访问者模式):表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素类的前提下定义作用于这个元素的新操作。

22.Interpreter(解释器模式):给定一个语言,定义它的文法的一个表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。

23.Memento(备忘录模式):在不破坏对象的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。

单例设计模式

解决的问题:保证一个类在内存中对象的唯一性。

例如:多个程序读取一个配置文件时,建议将配置文件封装成对象,这样会方便操作其中数据。但是,又要保证多个程序读到的是同一个配置文件对象,这就需要该配置文件对象在内存中是唯一的了。

如何保证对象唯一性呢?

思想:

1.不让其它程序创建该类对象

2.在本类中创建一个本类对象

3.对外提供一个公有方法,让其它程序获取这个对象

步骤:

1.因为创建对象都需要构造函数初始化,所以只要将本类中的构造函数私有化,其它程序就无法在创建该类对象了。

2.在类中创建一个本类对象。

3.定义一个方法,返回该对象。让其它程序可以通过这个方法就得到本类对象。(作用:可控)

代码体现:

1.私有化构造函数 private 类名(){}

2.创建私有并静态的本类对象 private static类名 s = new类名();

3.定义公有并静态的方法,返回该对象 public static返回值(类类型)方法名(){return s;}

单例设计模式使用的注意

1.不要使用单例模式存取全局变量。这违背了单列模式的用意,最好放到对应类的静态成员中。

2.不要将数据库连接做成单例,因为一个系统可能与数据库有多个连接,并且在有连接池的情况下,应当尽可能及时释放连接。

   单例设计模式由于使用静态成员存储类实例,所以可能会造成资源无法及时释放。

单例设计模式分为两种表现形式

单例设计模式——饿汉式

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. public class Single{      
  2.     private Single(){}//私有化构造函数  
  3.     private static Single s = new Singl();//私有并静态本类对象  
  4.     public static Single getInstance(){//定义公有并静态的方法,返回本类对象  
  5.         return s;  
  6.     }  
  7. }  

特点:Single类一进入内存,就已经创建好了对象。

好处:线程安全。

缺点:效率比较低,因为一开始就要加载类new一个对象。

 

单例设计模式——懒汉式

懒汉式:对象是方法被调用时才初始化,也叫对象的延迟加载。

特点:Single类进入内存时,对象还没有存在,只有调用了所提供的方法,才建立对象。

(1).缺点:有多个线程访问时会不安全,返回的会是不同对象。

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. public class Single{  
  2.     private Single(){}  
  3.     private static Single s = null;  
  4.     public static Single getInstance(){  
  5.         If(s==null)  
  6.             s = new Single();  
  7.         return s;   
  8.     }  
  9. }  

(2).改良第一种方法:加一个锁(synchronized)。

    缺点:虽然安全了,但效率非常低,因为在同一时间只有一个线程能访问,同时返回一个对象。

 

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. public class Single{  
  2.     private Single(){}  
  3.     private static Single s = null;  
  4.     public static synchronized Single getInstance(){  
  5.         if (s == null)  
  6.             s = new Single();  
  7.         return s;  
  8.   
  9.     }  
  10. }  

(3).改良第二种方法:用双重判断。  线程安全,效率高,可以有多个线程访问。

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. public class Single{  
  2.     private Single(){}  
  3.     private static Single s = null;  
  4.     public static Single getInstance(){  
  5.         if (s == null) {  
  6.             synchronized (Single.class) {  
  7.                 if (s == null) {   
  8.                     s = new Single();  
  9.                 }           }  
  10.         }  
  11.         return s;  
  12.     }  
  13. }  


 

 

总结:

            在实际开发中常用的是饿汉式,因为如果解决了懒汉式中的问题后,代码的复杂程度提高,所以建立单例时建议用饿汉式。

STM32F767 GPIO跑马灯工程从零搭建指南 嵌入式开发中,基于HAL库的STM32工程初始化是确保外设可靠运行的基础环节。其核心在于理解芯片时钟树配置原理、GPIO工作模式与硬件电气特性之间的映射关系。正确启用RCC时钟源、合理分配AHB/APB总线分频系数,可保障系统主频稳定;而精准设置推挽输出、上下拉状态及引脚速度,则直接影响LED等基础外设的驱动可靠性。结合STM32CubeMX图形化配置工具,开发者能将寄存器级操作抽象为可视化流程,显著提升工程可追溯性与复用性。本文以STM32F767IGT6和阿波罗开发板为载体,详解从Repository固 阅读详情

相关推荐

HALCON深度学习模型部署新选择:一份详细的OpenVINO 2021.4 LTS集成与配置避坑指南

本文详细介绍了如何将HALCON深度学习模型与OpenVINO 2021.4 LTS集成,提供环境配置、硬件加速优化及故障排除的实用指南。特别针对Intel独立显卡的AI加速器接口进行优化,帮助机器视觉工程师提升AI推理效率,适用于工业检测等高要求场景。

weixin_42531779的博客 238

JAVA设计模式之单例模式

本文继续介绍23种设计模式系列之单例模式。 概念:   java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例、饿汉式单例、登记式单例。   单例模式有以下特点:   1、单例类只能有一个实例。   2、单例类必须自己创建自己的唯一实例。   3、单例类必须给所有其他对象提供这一实例。  单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例...

一个本科小生的奋斗史 101万+

Shopee前端反爬三要素:x-sap-Ri、x-sap-Sec与af-ac-enc-dat深度解析

电商前端反爬机制本质是运行时环境可信验证,其核心在于动态生成的请求指纹、会话签名与行为加密载荷。这类机制不依赖静态Token,而是基于浏览器真实交互(如鼠标轨迹、页面可见性、时间精度)实时计算,体现JS运行时环境不可模拟性。技术价值在于将风控前移至客户端,大幅提升自动化绕过成本;典型应用场景包括商品价格监控、竞品数据采集与合规爬虫开发。本文聚焦Shopee实战案例,深入拆解x-sap-Ri(设备+行为哈希指纹)、x-sap-Sec(动态密钥签名)及af-ac-enc-dat(AES加密行为载荷)三大字段的生

weixin_29015127的博客 402

Java设计模式——单例模式

Java设计模式——单例模式

m0_60500421的博客 2778

Java 简易版 UDP 多人聊天室

【代码】Java 简易版 UDP 多人聊天室。

nmy15570188135的博客 1187

S32K344 Bootloader实战:一个按键实现从Boot到App的无缝跳转(附完整代码)

本文详细介绍了基于NXP S32K344微控制器的Bootloader开发实战,重点解析如何通过一个硬件按键实现从Boot到App的可靠跳转。内容涵盖内存分区规划、中断向量表重映射、外设初始状态管理等核心要素,并提供了完整的代码示例和调试技巧,适用于汽车电子和工业控制等高可靠性应用场景。

weixin_29192365的博客 307

Java 单例模式

饿汉式单例模式 操作步骤如上所示。 懒汉式单例模式 上面的例子中 懒汉式是不安全的。 2.区分饿汉式与懒汉式 饿汉式: 坏处:对象加载时间过长。 好处:饿汉式是线程安全的。 懒汉式: 好处:延迟对象的创建。 坏处:线程不安全。 3.单例模式的使用场景 优点: 由于单例模式只生成-一个实例,减少了系统性能开销,当一个对象的 .产生需要比较多的资源时,如读取配置、产生其他依赖对象时,则可以通过在应用启动时直接产生一个单例对象,然后永久驻留内存的方式来解决。 ...

我不想学习但是必须学习 424

labview的TDMS文件读写

本文先介绍TDMS概念和文件结构,然后介绍VI如何使用,最后分析一个labview的自带范例

观则明的博客 1万+

设计模式-创建型模式-单例模式

单例模式 单例模式的目的是用户每次请求 饿汉式(静态常量) 饿汉式(静态代码块) 懒汉式(线程不安全) 懒汉式(线程安全,同步方法) 懒汉式(线程安全,同步代码块) 双重检查 静态内部类 枚举 单例模式小结 ...

qq_38089996的博客 508

【2025软考高级架构师】论文篇——4、论可靠性系统中软件容错技术的应用

软件容错技术对软件的稳定性起着至关重要的作用,尤其是针对互联网性质的软件并发高存在流量峰值等问题,软件容错技术的应用的重要性就不言而喻了。经过这次我所采用的软件容错技术的方法和措施的实施效果后,使我也看到了自己身上的不足之处,我会在今后的架构设计过程中,不断更新自己的知识,不断完善自己的架构设计领域,设计出更好的软件架构,更好的支撑业务平台的运行,提高公司的竞争力,为公司为社会尽一份绵薄之力。

qq837993702的博客 619

AUTOSAR NvM 实车故障深度剖析:车载存储问题快速定位与工程解决方案

软件配置与代码逻辑无问题时,排查底层驱动与ECU硬件,步骤如下:底层驱动排查:排查Fls/Eep驱动配置,是否适配目标MCU(如TC397、S32K),编程/擦除/读取时序是否合理;检查Fls/Eep驱动错误处理逻辑,是否未处理Flash编程失败、读取错误等异常;验证Flash高速编程模式是否启用,是否能提升写入/读取速度;排查MemIf层配置,是否正确对接NvM与Fls/Eep驱动,是否存在调度延迟。

getusushu的博客 78

设计模式(一)—单例模式(附Java代码)

SessionFactory就够,这时就会使用到单例模式。

Xiong-er 的博客 3330

基于学术研究风云卫星数据下载教程

目录 一、相关网址 1.登录注册网址:国家卫星气象中心 2.风云数据服务客户端下载网址 3.风云卫星遥感数据服务网址 二、下载数据步骤 1.首先在注册登录网址,注册一个账户 2.待账户审核后,登录账户即可搜索并下载数据 三、相关工具下载 1.登录风云卫星遥感数据服务网址 2.NCSA HDFView软件 3.风云卫星数据(L1)处理软件包(FENGYUN Toolkit v1.1) 4.静止卫星云图分区图显示软件(SECView) 5.风云二号静止气象卫星数据及产品处理..

珞瑜的博客 1万+

浅谈设计模式(总论)

那么什么是设计模式呢?设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。设计模式使人们可以更加简单方便地复用成功的设计和体系结构。设计模式就是在面向对象软件设计过程中针对特定问题的简洁而优雅的解决方案。最早的设计模式是由四人组 简称GoF的四位软件工程学者在《设计模式:可复用面向对象软件的基础》一书,在书中共提供了 23 种模式来解决面向对象程序设计中的各种问题,但是要注意的是这些“好的设计”并不是GoF。

2401_86113453的博客 874

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

浅谈设计模式

随着对于编程的越来越深入,

走在前往架构师的路上 2044

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

设计模式浅谈

前言:初次系统的研究设计模式,想我这种职场小白来讲,刚开始看的真是一脸懵逼,没想到这个设计模式竟然有那么多的模式,其中我发现有一个设计模式-单例模式,是之前有了解过,废话不多说,正题开始。 一、设计模式分类 序号 模式&描述 包括 1 创建型模式这些设计模式提供了一种在创建对象的同时隐藏...

zhangxiaoyuBK的博客 318

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

浅谈Java设计模式

前言:设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对

比较喜欢、笑的博客专栏 2939

浅谈什么是MVC设计模式

什么是MVC?      MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形

ricky73999的博客 6万+
上一篇: Java面向对象
下一篇: JAVA多线程
白衣染霜陈
博客等级 码龄22年 682粉丝 338原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值