`
北极的。鱼
  • 浏览: 150596 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

【转】单例设计模式

 
阅读更多

转自: http://baike.baidu.com/link?url=UcxeuDIltmc8Rh6s1s4I8gvjWbKa8EAVDmMlZhDwIwEZNhSVCuHB_osv7SqqLWpX1vWdsEvKoLZbHVCRjeuWzq

 

单例模式是设计模式中最简单的形式之一。这一模式的目的是使得类的一个对象成为系统中的唯一实例。要实现这一点,可以从客户端对其进行实例化开始。因此需要用一种只允许生成对象类的唯一实例的机制,“阻止”所有想要生成对象的访问。使用工厂方法来限制实例化过程。这个方法应该是静态方法(类方法),因为让类的实例去生成另一个唯一实例毫无意义。

目的

对于系统中的某些类来说,只有一个实例很重要,例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务;一个系统只能有一个窗口管理器或文件系统;一个系统只能有一个计时工具或ID(序号)生成器。如在Windows中就只能打开一个任务管理器。如果不使用机制对窗口对象进行唯一化,将弹出多个窗口,如果这些窗口显示的内容完全一致,则是重复对象,浪费内存资源;如果这些窗口显示的内容不一致,则意味着在某一瞬间系统有多个状态,与实际不符,也会给用户带来误解,不知道哪一个才是真实的状态。因此有时确保系统中某个对象的唯一性即一个类只能有一个实例非常重要。

 

代码图片转自MSDN: 



 

主要优点:

1、提供了对唯一实例的受控访问。

2、由于在系统内存中只存在一个对象,因此可以节约系统资源,对于一些需要频繁创建和销毁的对象单例模式无疑可以提高系统的性能。

3、允许可变数目的实例。

 

主要缺点:

1、由于单利模式中没有抽象层,因此单例类的扩展有很大的困难。

2、单例类的职责过重,在一定程度上违背了“单一职责原则”。

3、滥用单例将带来一些负面问题,如为了节省资源将数据库连接池对象设计为的单例类,可能会导致共享连接池对象的程序过多而出现连接池溢出;如果实例化的对象长时间不被利用,系统会认为是垃圾而被回收,这将导致对象状态的丢失。

  • 大小: 38.5 KB
分享到:
评论

相关推荐

    设计模式:创建型之原型(深浅拷贝)、单例(饿汉式与懒汉式),三大工厂模式 结构型之适配器模式,代理模式(三大代理)

    单例模式是保证一个类仅有一个实例,并自行提供访问该实例全局访问点的创建型模式。 原型模式用来解决对象的创建问题,它是指用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的对象 ...

    尚硅谷设计模式源码笔记课件.zip

    1) 内容包括: 设计模式七大原则(单一职责、接口隔离、依赖倒转、里氏替换、开闭原则、迪米特法则、合成复用)、UML类图(类的依赖、泛化和实现、类的关联、聚合和组合) 23种设计模式包括:创建型模式:单例模式(8种...

    Java设计模式 版本2

    目录:前言,UML建模技术,深入浅出UML类图,从招式与内功谈起——设计模式概述,面向对象设计原则,工厂三兄弟之简单工厂模式,工厂三兄弟之工厂方法模式,工厂三兄弟之抽象工厂模式,确保对象的唯一性——单例模式...

    设计模式(23种)与设计原则(6种)

    详细描述全部(23种)设计模式与设计原则(6种)。 (一)设计原则包括: 1、开闭原则 2、里氏代换原则 3、依赖转换原则 4、接口隔离原则 5、合成/聚合复用原则 6、最少知识原则 (二)设计模式 1)工厂模式...

    c++设计模式全系列+应用场景+实例说明

    2. **单例模式(Singleton Pattern)**:单例模式是一种创建型设计模式,确保一个类只有一个实例,并提供一个全局访问点。 3. **观察者模式(Observer Pattern)**:观察者模式是一种行为设计模式,定义了对象间的...

    Java设计模式.docx

    单例模式:单例模式是一种创建型模式,它保证一个类只有一个实例,并提供了全局访问点。 适配器模式:适配器模式是一种行为型模式,它允许将一个类的接口转换成客户端所期望的另一个接口。 观察者模式:观察者模式是...

    Head First 设计模式 JAVA源码

    所有的设计模式Java实现。 第一讲:简单工厂模式 第二讲:工厂方法模式 第三讲:抽象工厂模式 第四讲:工厂模式在开发中的运用 第五讲:单例模式 第六讲:原型模式 第七讲:建造者模式 第八讲:装饰模式 第...

    c#进行项目设计时可以直接使用资源

    1.c#基础Switch和case条件选择 2.c#基础类型转换方法 ...23.c#进阶单例设计模式 24.c#进阶继承(构造方法不能继承) 25.c#进阶继承(构造方法) 26.c#进阶访问权限修饰符 27.c#进阶英雄管理器 28.c#进阶多态初步1

    Java23种设计模式详解,看这一个就够了

    Java设计模式共有23种,分别为:抽象工厂模式、建造模式、工厂方法模式、原型模式、单例模式、外观模式、适配器模式、桥接模式、组合模式、装饰模式、享元模式、代理模式、命令模式、解释器模式、访问者模式、迭代子...

    PHP设计模式精彩剖析

    设计模式可以帮助开发人员编写可重用、可扩展和易于维护的代码。 1. 工厂模式(Factory Pattern):用于创建对象的工厂类,隐藏了对象的创建逻辑,通过工厂方法返回对象。 2. 单例模式(Singleton Pattern):确保...

    Qt 串口通信,线程,单例。解析浮点数据,3字节的数据。

    串口管理类放到线程中,这样不会影响界面的流程,并且串口管理类用到了单例的设计模式,这个平时做项目积攒下了的经验,并且对3字节的数据进行了解析。用到了联合体,更方便的将16进制数转换成浮点数,发送数据的...

    Picasso简单封装

    这个类使用单例设计模式,全局使用一个,也就是全局使用一个Picasso对象,在Demo中我是在基类(BaseActivity)中初始化的;在PicassoUtils这个类中封装了一些加载图片的方法,加载图片时调用一个方法即可;另外在这...

    23种设计模式入门到精通详解.txt

    单例模式:某个类只能有一个实例,提供一个全局的访问点。 简单工厂:一个工厂类根据传入的参量决定创建出那一种产品类的实例。 工厂方法:定义一个创建对象的接口,让子类决定实例化那个类。 抽象工厂:创建相关...

    design-pattern-java.pdf

    设计模式综合应用实例 设计模式综合应用实例 多人联机射击游戏 多人联机射击游戏中的设计模式应用(一) 多人联机射击游戏中的设计模式应用(二) 数据库同步系统 设计模式综合实例分析之数据库同步系统(一) 设计...

    GoF 的 23 种设计模式

    GoF 的 23 种设计模式的分类,现在对各个模式的功能进行介绍。 单例(Singleton)模式:某个类只能生成一个实例,该类提供了一个全局访问点供外部获取该实例,其拓展是有限多例模式。 原型(Prototype)模式:将一...

    深入浅出设计模式(中文版)

    1.1什么是设计模式 2 1.2设计模式的作用 3 1.3GRASP模式的分类 4 1.4GoF设计模式的分类 4 1.5模式的学习阶段 6 第2章负责任地设计对象——GRASP 9 2.1InformationExpert(信息专家) 11 2.2Creator(创造者)...

    C#编程大作业基于Unity游戏引擎的2D闯关游戏源码+sln解决方案+项目说明.zip

    基于单例设计模式实现转场动画; 设计并实现了游戏的核心机制和规则,如玩家属性和道具系统,包括生存机制和道具收集与使用等; 通过不同的关卡动态调整游戏难度,确保游戏的平衡性和挑战性。 ## 角色: 创建多个...

    深入浅出设计模式(中文版电子版)

    1.1什么是设计模式 2 1.2设计模式的作用 3 1.3GRASP模式的分类 4 1.4GoF设计模式的分类 4 1.5模式的学习阶段 6 第2章负责任地设计对象——GRASP 9 2.1InformationExpert(信息专家) 11 2.2Creator(创造者)...

    完整学习笔记:《剑指offer》Java版代码实现

    第二题 单例设计模式 测试2 第三题 二维码中找到目标值 测试3 第四题 替换字符串中的空格 测试4 第五题 从尾到头打印链表 测试5 第六题 由前序和中序重建重建二叉树 测试6 第七题 使用两个栈实现队列 测试7 第八题 ...

    Java面试 Java超级经典100问题 Java高级开发工程师必备 Java面试宝典

    单例设计模式.3.二维数组中查找目标值、4.替换字符串中的空格。5.从尾到头打印链表.6.由前序和中序遍历重建二叉树.7.用两个栈实现队列8.求旋转数组的最小数字、9.斐波那契数列的第n项(青蛙跳台阶)10.二进制中1的个数...

Global site tag (gtag.js) - Google Analytics