设计模式之单例模式
来源:互联网 发布:淘宝情侣装冬装 编辑:程序博客网 时间:2024/06/08 06:58
单例模式,顾名思义,就是设计出来这样一种类型,这种类型在程序中只允许拥有一个实例的存在,其实,这样的场景在我们的日常生活之中并不少见,像足球比赛,篮球比赛等很多的球类运动在比赛之中就只拥有一个足球实例(或者是一个篮球实例等等),我这样说,大家对单例模式应该有一个大概的理解了吧,现在让我们想想这样一个类,应该如何设计呢?
首先,这个类只能有一个实例,那么也就是说我们设计的这个类在外部的话,用户不能随随便便地创造自己的对象,而对象的创造必须调用该类的构造函数,于是一个很直接的想法是将类的构造函数声明为 private,这样就可以避免用户在外部实例化自己的对象。另外,既然外部已经无法实例化对象了,那么我们在类的内部就必须实例化出该类的唯一的一个对象,并且让用户通过一个类成员函数(static) GetInstance() 来取得该对象,代码如下:
以上的代码确实实现了单例模式,但还存在问题,什么问题呢?
没错,以上的代码在单线程下能够很好地进行工作,但是在多线程的程序中就出现问题了,因为
这段代码在多线程的环境之下存在一个竞争条件,试想一下,如果线程 A 执行到 时,线程的时间片完成,cpu 切换到线程 B,线程 B 在其时间片内执行了
之后,轮到线程 A 执行了,则线程 A 会接着执行下一条指令,也就是,这时,改变了 instance 的指向并且创建了另外一个实例,线程 B 创建的实例 “泄露”了,这其实就是多线程的同步问题,解决这个问题可以采用相关的线程同步技术,但有时需要考虑因为线程同步所带来的额外开销问题,这个需要根据具体的环境进行具体的分析。以下我给出我推荐的一种解决方案:
谢谢阅读,如有意见和建议,欢迎交流!
- 设计模式之 单例设计模式
- 设计模式之 单例设计模式
- 设计模式之单例设计模式
- 设计模式之-----------单例设计模式
- 设计模式之:单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之-单例设计模式
- 设计模式之单例设计模式 标签: 设计模式
- 设计模式之单例
- 设计模式之单例
- 设计模式之 单例
- git 的应用
- c#多线程介绍1
- as3要利用它的优势
- @RequestMapping 用法详解之地址映射 (2013-08-11 16:06:58)
- 常用的数据校验方法
- 设计模式之单例模式
- VB→C++→C#→VB.NET,语言的共性和个性
- 第十周项目五输出完数
- Java中文转码的例子<转>
- linux下搭建nexus
- 设计模式案例--单例模式--登记式单例模式(registry singleton)
- Dynamics CRM2013 更新用户数据主要电子邮件字段报数据加密错误
- 第十周项目二解密
- java中的native关键字的意思