单例模式(Singleton)
单例模式 Singletonn Pattern
Ensure a class has only one instance, and provide a global point of access ot it.
保证一个类只有一个实例,并提供一个访问他的全局访问点。
通常移位可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象,一个最好的办法就是,让类自身负责保存它的唯一实例,这个类可以保证没有其它实例可以被创建。单例模式可以保证唯一的实例,可以对唯一实例的受控访问。单例类可以有状态,可以被继承。
多线程时的单例
可以对进程进行加锁处理,lock 是确保当一个线程位于代码的临界区时,另一个线程不进入临界区,如果其它进程试图进入锁定的代码,则它一直等待(即被阻止),直到该对象审美被释放。
静态初始化
C#与公式语言运行库也提供了一种静态初始化方法,这种方法不需要开发人员显式的编写线程安全代码,即可解决多线程环境下它是不安全的问题。
这样写解决了两个问题:全局访问和实例化控制。Intance 变量标记为Readonly ,这意味着只能在静态初始化期间或在类构造函数中分配变量。
对象的继承关系在编译时就定义好了,所以无法在运行时改变从父类继承的实现,子类的实现与它的父类有着密切的依赖关系,以至于父类实现中的任何变化必然会导致子类发生变化,当你需要复用子类时,如果继承下来的实现不适合解决新的问题,则父类必须重写或被其它更合适的类替换,这种依赖关系限制了灵活性并最终限制了复用性。
有了新锤子,所有的东西看上去都成了钉子。
复制粘贴是最容易的编程,也是最没有价值的编程。
单例模式的优点
1.由于单例模式在内存中只有一个实例,减少了内存开支,特别是一个对象需要频繁地创建、销毁时,而且创建或销毁时性能性能又无法优化,单例模式的优点就非常明显。
2. 由于单例模式只生成 一个实例,所以减少了系统的性能开销,当一个对象的产生需要比较锪资源时,然后用永久驻留内存的方式来解决。
3.单例模式可以避免对资源的多重占用。例如一个写文件动作,由于只有不念旧恶实例存在内存中,避免对同一个资源文件的同时写操作。
4. 单例模式可以在系统设置全局的访问点,优化和花市资源访问,例如可以设计一个单例类,负责所有数据表的映射处理。
单例模式的缺点
1.单例模式一般没有接口,扩展很困难,若要扩展,除了修改代码基本上没有第二种途径可以实现,单例模式为什么 不能增加接口呢?因为接口对单例模式是没有任何意义的,它要求“自行实例化”,并且提供单一实例、接口或抽象类是不可能被实例化的。当然,在特殊情况下,单例模式可以实现接口,被继承等,需要在系统开发中根据环境判断。
2. 单例模式对测试是不利的在并行开发环境中,如果单例模式没有完成,是不能进行测试的,没有接口也不能使用 mock的方式虚拟一个对象。
3.单例模式与单一职责原则有冲突,一个类应该只实现一个逻辑,而不关心它是否是单例的,是不是要单例取决于环境,单例‘要单例“和业务逻辑融合在一个类中。
单例模式的使用场景
在一个系统中,要求一个类有且仅有一个对象,如果出现多个对象就会出现”不良反应" 可以采用单例模式。
1. 要求生成 唯一序列号的环境。
2. 在整个项目中需要一个共享访问点或共享数据。
3.创建一个对象需要消耗的资源过多,如要访问IO和数据库等 资源
4.需要定义大量的表态常量和表态方法。
单例模式(Singleton)的更多相关文章
- 设计模式之单例模式——Singleton
设计模式之单例模式--Singleton 设计意图: 保证类仅有一个实例,并且可以供应用程序全局使用.为了保证这一点,就需要这个类自己创建自己的对象,并且对外有 ...
- 【白话设计模式四】单例模式(Singleton)
转自:https://my.oschina.net/xianggao/blog/616385 0 系列目录 白话设计模式 工厂模式 单例模式 [白话设计模式一]简单工厂模式(Simple Factor ...
- ooad单例模式-Singleton
单例模式Singleton 主要作用是保证在Java应用程序中,一个类Class只有一个实例存在. 比如建立目录 ...
- iOS单例模式(Singleton)写法简析
单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. 1.单例模式的要点: 显然单例模式的要点有三个:一是某个类只能有一个实例: ...
- 浅谈设计模式--单例模式(Singleton Pattern)
题外话:好久没写blog,做知识归纳整理了.本来设计模式就是个坑,各种文章也写烂了.不过,不是自己写的东西,缺少点知识的存在感.目前还没做到光看即能记住,得写.所以准备跳入设计模式这个大坑. 开篇先贡 ...
- 设计模式之——单例模式(Singleton)的常见应用场景
单例模式(Singleton)也叫单态模式,是设计模式中最为简单的一种模式,甚至有些模式大师都不称其为模式,称其为一种实现技巧,因为设计模式讲究对象之间的关系的抽象,而单例模式只有自己一个对象,也因此 ...
- 设计模式之单例模式(Singleton Pattern)
单例模式 单例模式(Singleton Pattern)在java中算是最常用的设计模式之一,主要用于控制控制类实例的数量,防止外部实例化或者修改.单例模式在某些场景下可以提高系统运行效率.实现中的主 ...
- 设计模式(4) -- 单例模式(Singleton)
设计模式(4) -- 单例模式(Singleton) 试想一个读取配置文件的需求,创建完读取类后通过New一个类的实例来读取配置文件的内容,在系统运行期间,系统中会存在很多个该类的实例对象,也就是说 ...
- IOS单例模式(Singleton)
IOS单例模式(Singleton) 单例模式的意思就是只有一个实例.单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. 1.单例模式的要点: 显然单例模 ...
- java设计模式之 单例模式 Singleton
static 的应用 单例模式 Singleton 单例:保证一个类在系统中最多只创建一个实例. 好处:由于过多创建对象实例,会产生过多的系统垃圾,需要GC频繁回收,由于GC会占用较大的系统资源,所有 ...
随机推荐
- linux shell终端打开方式
前言 Linux操作系统没有Window操作系统界面友好,使用者需要使用命令与系统进行交互,交互媒介为shell终端. 有三种方式可以打开终端: 方法一: 打开新的窗口并打开shell终端,快捷键:c ...
- PAT天梯:L1-019. 谁先倒
L1-019. 谁先倒 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 划拳是古老中国酒文化的一个有趣的组成部分.酒桌上两人划拳 ...
- Struts2重新学习1
一:框架 1:框架的意义在于可以大大提高我们的开发效率.框架时一种主动设计,使用框架必须遵守框架指定好的开发流程. 2:框架的强大之处不是源自它能让你做什么,而是它不能让你做什么.有规有矩,方可成方圆 ...
- test20190320 全连(fc)
题意 全连(fc) [题目背景] 还记得若干年前那段互相比较<克罗地亚狂想曲>的分数的日子吗? [题目描述] E.Space 喜欢打音游. 但是他技术不好,总是拿不到全连(Full Com ...
- LG4454 【[CQOI2018]破解D-H协议】
先谈一下BSGS算法(传送门) 但是上面这位的程序实现比较繁琐,看下面这位的. clover_hxy这样说 bsgs算法,又称大小步算法(某大神称拔山盖世算法). 主要用来解决 A^x=B(mod C ...
- test20181004 排列
题意 分析 容斥公式的意义 选了原图中\(x(x \geq i)\)条边的方案,重复了\(\binom{x}{i}\)次. 有多加多减,所以就是那个式子. 具体而言,对选了x条原图中的边的方案,总共加 ...
- 设置tab标签页 遮挡部分
效果如下: 主要代码: <div class="need-detail"> <div class="top-title"> <sp ...
- 使用Spring Boot操作Hive JDBC时,启动时报出错误:NoSuchMethodError: org.eclipse.jetty.servlet.ServletMapping.setDef
使用Spring Boot操作Hive JDBC时,启动时报出错误:NoSuchMethodError: org.eclipse.jetty.servlet.ServletMapping.setDef ...
- MySQL--区分表名大小写
============================================================================ 在MySQL中,可以通过lower_case_ ...
- MySQL--MODIFY COLUMN和ALTER COLUMN
=================================================== 在修改列时,可以使用ALTER TABLE MODIFY COLUMN 和ALTER TABL ...