设计模式札记——单例模式(Singleton Pattern)
单例模式感觉是所有设计模式中最简单的模式了。
Ensure a class has only one instance and provide a global point of access to it.确保一个类只有一个实例,并提供一个全局访问入口。
UML图如下:
我们在开发时经常会用到这个模式,通常定义一个私有的构造函数来避免被其它类实例化。
代码就不再写了,朋友们可以查看这里:http://www.dofactory.com/Patterns/PatternSingleton.aspx
优点:
1、单例模式在内存中只有一个实例,减少了内存和系统性能的开销。
2、单例模式可以避免对资源的多重占用,比如写文件时只能有一个进程访问,就可以通过单例模式来实现。当然,lock也是可以的。
3、单例模式可以在系统设置一个全局的访问点,优化和共享资源访问,我觉得这是最主要的一个优点。
缺点:
1、单例模式没有接口,很难扩展,如果要扩展基本都需要修改源代码。违背开放原则。
2、单例模式也与单一职责有冲突,它把“要单例”和业务逻辑整合在一个类中。
3、使用单例模式对TDD开发不利,没有接口不能mock。
适用场景:
在系统中,要求一个类有且只有一个实例的时候。
扩展:
可能有些时候系统中一个类需要实例化2个,这时我们可以实现这样的扩展。
{
public string Name { get; set; }
private static List<Singleton> list;
private static bool isEven = false;
static Singleton()
{
list = new List<Singleton>();
list.Add(new Singleton { Name = "Singleton A" });
list.Add(new Singleton { Name = "Singleton B" });
}
private Singleton() { }
public static Singleton Instance
{
get
{
int index = isEven ? 1 : 0;
isEven = !isEven;
return list[index];
}
}
}
我们就可以通过Singleton.Instance取得不同的实例。
这跟享元模式的思想有那么一点类似了。
转载于:https://www.cnblogs.com/moozi/archive/2010/08/31/1814164.html
设计模式札记——单例模式(Singleton Pattern)相关推荐
- 【设计模式】单例模式 Singleton Pattern
通常我们在写程序的时候会碰到一个类只允许在整个系统中只存在一个实例(Instance) 的情况, 比如说我们想做一计数器,统计某些接口调用的次数,通常我们的数据库连接也是只期望有一个实例.Windo ...
- Java设计模式之单例模式(Singleton Pattern)
**单例模式:用来创造独一无二的,只能有一个实例的对象设计模式.单例模式确保一个类只有一个实例,并提供一个全局访问点.**相比于全局变量(对对象的静态引用),单例模式可以延迟实例化,而且全局变量不能保 ...
- 设计模式之单例模式——Singleton
设计模式之单例模式--Singleton 设计意图: 保证类仅有一个实例,并且可以供应用程序全局使用.为了保证这一点,就需要这个类自己创建自己的对象,并且对外有 ...
- Net设计模式实例之单例模式( Singleton Pattern)
一.单例模式简介(Brief Introduction) 单例模式(Singleton Pattern),保证一个类只有一个实例,并提供一个访问它的全局访问点.单例模式因为Singleton封装它的唯 ...
- 单例模式 Singleton Pattern
源地址 单例模式 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 这种模式涉及到一个单一的类,该 ...
- 设计模式之——单例模式(Singleton)的常见应用场景(转):
单例模式(Singleton)也叫单态模式,是设计模式中最为简单的一种模式,甚至有些模式大师都不称其为模式,称其为一种实现技巧,因为设计模式讲究对象之间的关系的抽象,而单例模式只有自己一个对象,也因此 ...
- .NET设计模式(1):1.1 单例模式(Singleton Pattern)
概述 单例模式就是保证在整个应用程序的生命周期中,在任何时刻,被指定的类只有一个实例,并为客户程序提供一个获取该实例的全局访问点. 单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单 ...
- HeaFirst设计模式-单件模式[单例模式](Singleton Pattern)
深入分析单件模式 本次主要介绍的内容有 单件模式 单线程下的单件模式实现 多线程下实现单件模式出现的问题分析 JMM内存模型 多线程下的单件模式实现的三种方式 这些内容,可以从最根本理解单例模式的代码 ...
- Python 设计模式: 单例模式(singleton pattern)
2019独角兽企业重金招聘Python工程师标准>>> 如果想在整个程序的运行过程中,某个类只有一个实例的话,可以通过单例模式来实现. 在 Python 中实现单例模式有很多种方式, ...
最新文章
- 浅谈https\ssl\数字证书
- RHCE课程-RH253Linux服务器架设笔记三-Samba服务器配置(1)
- java temporalfield_Java Year isSupported(TemporalField)用法及代码示例
- 计算机斐波那流程图,循环结构——斐波那契数列.DOC
- notepad++正则表达式去掉关键字所在行
- 【测试方法篇】效率测试
- 阿里程序员转行公务员,工资少了40万,只留一句话惊醒众人
- 机器学习实战 | 数据探索(变量变换、生成)
- mysql重启,全网独家首发!
- vs2017编译x265源码
- 模糊综合评价模型 ——第四部分,多级模糊综合评价模型应用:例题4,根据学生表现评选奖学金
- 新一代报表工具FastReport VCL 6.9发布!
- nagios一些安装注意
- MySQL事务隔离及锁机制
- java freemarker 动态生成word,再转pdf
- 【爬虫实战】国家企业公示网-crawler爬虫抓取数据
- 北京东方国信Java面经(1H)
- 华为物联网操作系统LiteOS内核教程02-HelloWorld
- 北大2022计算机学院夏令营,2022保研夏令营:北京大学国家发展研究院夏令营活动...
- 解析ArcGis的字段计算器(四)——日期字段计算
热门文章
- CentOS安装rpm包时遇到Header V3 DSA signature: NOKEY时解决办法
- ISAkmp载荷头部
- 艰难的原创——谈互联网创业
- MongoDB 从节点 延迟的测试
- android系统镜像:boot.img kernel.img ramdisk.img system.img userdata.img cache.img recovery.img
- 【android】og
- Eclipse通过JDWP调试Dalvik
- Python高级编程:类和实例属性的查找顺序—mro查找
- spring的AOP配置之@注解方式
- python 字典添加元素