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

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

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

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

四、结构

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

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

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

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

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

Singleton(单件)--对象创建模式相关推荐

  1. C#面向对象设计模式纵横谈——Singleton单件(创建型模式)

    Singleton单件(创建型模式) 动机(Motivation) 在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性.以及良好的效率. 如何绕过常规的 ...

  2. Abstract Factory(抽象工厂)--对象创建模式

    Abstract Factory (抽象工厂)–对象创建模式 一.意图 提供一个创建一系列相关或者相互依赖的接口,而无需指定它们具体的类. 二.动机 1.在软件系统中,经常面临着"一系列相互 ...

  3. Prototype(原型)--对象创建模式

    Prototype(原型)–对象创建模式 一.意图 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 二.动机 1.在软件系统中,经常面临着"某些结构复杂的对象"的 ...

  4. 李建忠设计模式之“对象创建”模式

    文章目录 工厂方法模式(Factory Method) 定义 动机 结构图 代码 要点 总结 抽象工厂模式(Abstract Factory) 定义 动机 结构图 代码 要点 总结 原型模式(Prot ...

  5. javascript的对象创建模式---命名空间模式

    javascript中对象的概念是很普遍的,对象是是对象,数组是对象,函数也是对象,字符串其实也是对象.常见的对象创建方法有对象字面量.构造函数创建.我们先来看看对象的创建还有哪些更高级的模式. 一. ...

  6. JavaScript模式读书笔记 第5章 对象创建模式

    1,命名空间模式  namespace   <script> var myApp = {};//通过全局变量来实现命名空间 maApp.Parent = function (){   }; ...

  7. JavaScript中的面向对象(1):对象创建模式

    对象 JS中的对象是无序属性的集合,属性可以包括基本值.对象.函数.简而言之,JS中的对象就是一组键值对. 创建对象 工厂模式 工厂模式是用函数将创建对象的细节封装起来. function creat ...

  8. Objective-C设计模式——单例Singleton(对象创建)

    单例 和其它语言的单例产不多,可以说是最简单的一种设计模式了.但是有几个点需要注意下,单例就是一个类只有一个实例. 所以我们要想办法阻止该类产生别的实例,一般语言中都会将构造函数写为private.但 ...

  9. 11. 对象创建模式之 Builder模式(构建器)(不常用)

    1. 动机 在软件系统中,有时候面临着"一个"复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成:由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化, ...

最新文章

  1. 报名 | 瓜子二手车周洲:如何玩转AI赋能下的新零售?
  2. Activity如何后台运行?不是缓存,是运行。
  3. 《MySQL——锁》
  4. 【java并发编程艺术学习】(四)第二章 java并发机制的底层实现原理 学习记录(二) synchronized...
  5. java 数据分析 用户信息_Java数据库——使用元数据分析数据库
  6. 在matlab环境中实现图像的傅里叶变换,matlab用傅里叶变换实现图像的低通滤波
  7. nginx与php处理用户请求,配置 NGINX 处理 PHP 的请求《 LEMP 网站应用运行环境 》
  8. 路由器升级须注意,升级导致功能失灵无法使用无线功能
  9. 【毕业答辩】毕业论文答辩有技巧!
  10. 计算机考试c语言真题及答案,计算机二级c语言考试试题及答案
  11. java关键字_Java关键字
  12. loj #6122. 「网络流 24 题」航空路线问题
  13. optisystem中器件的学习(4-Test Sets/Passives Library/Optical Switches)
  14. Unity-ShaderLab 逆向还原《原神》角色卡通渲染思路与实现(保姆级教学)-1
  15. wps如何删除指定页眉
  16. English语法_形容词-排序
  17. Xcom传送文件实例
  18. 密立根油滴实验实验数据处理
  19. OSChina 周日乱弹 ——颜值和代码水平是正比
  20. 前端全栈大佬是如何使用javaScript实现一个无缝轮播(最终版)

热门文章

  1. Eclipse之如何快速查看抽象函数实现
  2. java之简单的Callback使用总结
  3. linux网络编程之setsockopt()函数来设置socket状态以及getsockopt函数只用总结
  4. linux c 之使用-O来优化gcc
  5. vue data数据修改_Vue 超清晰思维导图(7张),详细知识点梳理!
  6. 软件项目组织管理(九)项目人力资源管理
  7. 日本原装进口雪平锅,1台顶4台,有它谁还点外卖?
  8. 2019最佳年会,新东方6名员工冒着离职的风险,在年会上怒怼老板
  9. 区块链、自动驾驶、人工智能鏖战开始 谁将成为下一个风口?
  10. 近期GitHub上最热门的开源项目(附链接)