Singleton(单件)--对象创建模式

Singleton(单件)–对象创建模式

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

二、动机
1.在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性、以及良好的效率。
2.如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例?
3.这应该是类设计者的责任,而不是使用者的责任。

三、适用性
1.当类只能有一个实例且客户可以从一个众所周知的访问点访问它时。
2.当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。

四、结构
在这里插入图片描述

五、效果
1.对唯一实例访问的受控访问。
2.缩小名空间。
3.允许对操作和表示精化。
4.比类操作更灵活。

六、实现
1.保证一个唯一的实例。
2.创建Singleton类的子类。

七、要点总结
1.Singleton模式中的实例构造器可以设置为protected以允许子类派生。
2.Singleton模式一般不要支持拷贝构造和Clone接口,因为这些有可能导致多个对象实例,与Singleton模式的初衷违背。
3.如何实现多线程环境下安全的Singleton?注意对双检查锁的正确性实现。

八、举例说明
比如要建一个全局的管理器,管理整个资源,或者建立唯一的IO访问接口,等等。

本文为李建忠设计模式视频的笔记以及《设计模式-可复用面向对象的软件的基础》和自己的部分见解

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

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

相关文章

[计组]断定方式

断定方式: 微地址的形成方法之一。 断定方式:根据机器状态决定下一条微指令的地址,下一条微指令的地址包含在当前微指令的代码中。 这是一种直接给定微地址和测试判定地址相结合的方式。为了实现多路分支,将微地址的若干低位作为可断定的部分…

龙芯团队 在移值 MIPS64 下的.NET Core 进度速报

写在开始前我们的主要业务基于 dotnet core 2.x 与 3.1 完成,目前 dotnet core 3.1 支持的 CPU 架构列表中还不包含龙芯,且在 gitlab issue 中表示官方当前没有对 MIPS 的支持计划。更具体操作系统与 CPU 架构列表见 [Download .NET Core 3.1](https://d…

Adapter(适配器)--类对象结构型模式

Adapter(适配器)–类对象结构型模式 一、意图 将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本接口不兼容而不能一起工作的那些类可以一起工作。 二、动机 1.在软件系统中,由于应用环境的变化,常常需要将“一…

[计组]压缩BCD码指二进制编码的十进制

压缩BCD码指二进制编码的十进制 压缩BCD码指一个字节8位存储2位BCD码。比如32用8421BCD码表示如下:非压缩BCD码表示:00000011 00000010;压缩BCD码表示:0011 0010;使用BCD码表示10进位制数字比较好理解,且占…

如何使用ABP框架(2)三层架构与领域驱动设计的对比

本文来自长沙.NET技术社区,原创:邹溪源。全文共有8500字,读完需耗时10分钟。题图来自pixabay简述上一篇简述了ABP框架中的一些基础理论,包括ABP前后端项目的分层结构,以及后端项目中涉及到的知识点,例如DTO…

Bridge(桥接)--对象结构模式

Bridge(桥接)–对象结构模式 一、意图 将抽象部分与它的实现部分分离,使它们都可以独立的变化。 二、动机 1.由于某些类型的固有的实现逻辑,使得它们具有两个变化的维度,乃至多个纬度的变化。 2.如何应对这种“多维度…

自然数,实数,有理数,整数,分数,无理数

自然数:即非负整数 实数:包括有理数和无理数 有理数:整数、分数 整数包括:0、正整数和负整数 分数:包括正分数和负分数 无理数:无限不循环小数 自然数用以计量事物的件数或表示事物次序的数。即用数码…

数学中R,Z,N,Q都代表什么意思?

N:非负整数集合或自然数集合{0,1,2,3,…n} R:实数集合(包括有理数和无理数) Z:整数集合{…,-1,0,1,…} Q:有理数集合 N*/ N:正整数集合{1,2,3,…n} 在数学中没有用Z*表示的概念。 其他常见集合符号&a…

Composite(组合)--对象结构型模式

Composite(组合)–对象结构型模式 一、意图 将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。 二、动机 1.软件在某些情况下,客户代码过多的依赖于对象容器复杂的内部实现结构…

魔幻艰难的2020上半年!

阅读本文大概需要 2.8分钟。告诉大家一个很震惊的消息!2020年已度过一半!在过去这半年的时间里,这个世界发生了巨大变化,并且很难恢复如初。2019年的最后一天,罗胖在跨年演讲中借用何帆老师的一句话与众人共勉&#xf…

[SpringBoot2]ajax函数中data参数的数据设置方式

ajax函数中data参数的数据设置方式:

Blazor带我重玩前端(二)

概览Blazor目前有两种托管模式,一种是Server-Side模式,一种是WebAssembly模式。官方首先支持的是Service-Side模式,使用WebAssembly模式,需要更新到最新版VS2019。小编目前的精力是更多的专注于Blazor-WebAssembly模式的研究&…

Decorator(装饰)--对象结构型模式

Decorator(装饰)–对象结构型模式 一、意图 1.动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。 二、动机 1.在某些情况下我们可能会“过度地使用继承来扩展对象的功能”, 由于继承为类…

[mybatis]Getting Started

总体流程 1.根据xml配置文件(全局配置文件)创建一个SqlSessionFactory对象2.sql映射文件;配置了每一个sql,以及sql的封装规则等3.将sql映射文件注册在全局配置文件中4.写代码1)根据全局配置文件得到SqlSessionFactory2)使用sqlSession工厂,获…

Facade(外观)--对象结构型模式

Facade(外观)–对象结构型模式 一、意图 为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 二、动机 1.上述左边方案的问题在于组件的客户和组件中各种复杂的子系…

.NET Core微服务开发网篇-ocelot

通过上篇我们知道,网关是外部访问的统一入口,本文采用Ocelot作为Api网关。环境要求:vs2019.NetCore3.1Ocelot16.0.1创建一个产品服务Api站点(AAStore.ProductCatalog.Api)添加一个ProductController[Route("api/[…

Flyweight(享元)--对象结构型模式

Flyweight(享元)–对象结构型模式 一、意图 运行共享技术有效地支持大量细粒度的对象。 二、动机 1.在软件系统采用纯粹对象方案的问题在于大量细粒度的对象会很快充斥在系统中,从而带来很高的运行时代价——主要指内存需求方面的代价。 2.…

IBM 声明对 Google 违背承诺未将 Istio 贡献给 CNCF 表示失望

Jason R McGee,IBM 院士,IBM 云平台副总裁兼 CTO。昨天晚上Google 宣布将 Istio 商标转让给 Open Usage Commons 组织,IBM 当即在 IBM Developer 网站上发表声明对 Google 的做法表示失望。以下为 IBM 云平台副总裁兼 CTO Jason R McGee 的声…

[mybatis]Configuration XML_properties

properties mybatis可以使用properties来引入外部properties配置文件的内容 resource:引入类路径下的资源 url:引入网络路径或者磁盘路径下的资源 process 项目结构: mybatis-config.xml: <?xml version"1.0" encoding"UTF-8" ?> <!DOCTY…

Proxy(代理)--对象结构型模式

Proxy&#xff08;代理&#xff09;–对象结构型模式 一、意图 为其他对象提供一种代理以控制对这个对象的访问。 二、动机 1.在面向对象系统中&#xff0c;有些对象由于某种原因&#xff08;比如对象创建的开销很大&#xff0c;或者某些操作需要安全控制&#xff0c;或者需要…