设计模式之单例模式讲解

64 篇文章 0 订阅
5 篇文章 0 订阅
trufun1  9:41:27
UM网上课堂开课啦,本周讲述单例模式
trufun1  9:45:49
本周的it短文题目是:在bacon中建立需求跟踪矩阵的操作秘笈,欢迎大家到下列地址阅读:  http://blog.sina.com.cn/s/blog_a1c79d4801015svu.html
trufun1  9:50:23
回顾一下前面我们讲过的设计模式,包括:抽象工厂,工厂方法,组合模式,享元模式,原型模式
trufun1  9:53:58
这些模式都和对象创建有关,(虽然有些本身是组合的)
trufun1  9:57:14
我们知道原型模式是通过封装new的方法实现对象的创建,单例模式在这一点上和它相同
trufun1  10:02:53
在软件开发中,从现实世界映射过来的某种对象和其他关联对象的对应关系叫多重性,有一对一,一对多,多对多
trufun1  10:06:01
如果有一个对象在整个系统中都唯一,和其他对象的关系是一对一或一对多
trufun1  10:08:22
这个实例叫单例,怎样保证它只有一个实例呢?
=========欢迎访问www.trufun.net免费下载UML2建模工具==========
trufun1  10:11:45
单例模式就是解决这个问题的设计方法,以避免系统在多重性上出现问题(bug)
trufun1  10:14:05
比如:系统的打印机对象,应用程序对象,注册表对象等都只能有一个实例
trufun1  10:16:25
所以,保证一个类仅有一个实例,并提供一个访问(依赖)它的全局点就是单例模式。
trufun1  10:20:15
“仅有一个实例”反映的是对实例的创建是控制的,不是简单的谁想new就可以new的问题
trufun1  10:20:24
“仅有一个实例”反映的是对实例的创建是控制的,不是简单的谁想new就可以new的问题
trufun1  10:24:40
“访问它的全局点”怎样实现呢?答案;用静态修饰符就可以保证这一点
trufun1  10:28:33
 另外,这样做具有可以缩小命名空间的好处
trufun1  10:31:34
与单例对应的还有一个多例,确定数目的实例
trufun1  10:34:10
它的原理和单例相同,只是在最大实例数目上作一个限制
trufun1  10:36:31
保证唯一实例可不是一个容易的事情,特别是在多线程程序中
trufun1  10:40:48
前面已经说过:实例化是被封装的,有一部分程序是保证唯一性,有一部分是真正实例化的
trufun1  10:43:53
如果有两个线程同时进入封装体内部,就会出现在某种情况下实例化数目越界的情况
trufun1  10:47:09
这个工作一般由关键词:synchronized来把门
trufun1  10:51:56
还有一种方法是进入封装内部,在真正实例化部分再检查实例化数目,并把这部分用synchronized来把门
trufun1  10:53:21
这就是所谓的:双重检查加锁机制
trufun1  10:55:47
单例模式的原理就讲完了,下面看看单例模式的角色
trufun1  11:00:41
单例模式的第一个角色就是客户端,是它向封装体发出了实例化请求
trufun1  11:07:09
第二角色就是封装体,它必须具有接收客户端请求的能力,以及实例化控制,真正实例化的功能
trufun1  11:08:56
有了角色,他们是怎样配合完成单例实例化的?
trufun1  11:12:17
1.客户端对象发出实例化请求
trufun1  11:16:37
2.封装体实例化本身
trufun1  11:18:00
3.如果客户端再请求实例化
trufun1  11:20:02
4.封装体送出刚才已经实例化的对象
trufun1  11:22:14
单例模式就讲完了,到今天为止,创建型设计模式就讲完了
trufun1  11:25:13
我们总共讲了抽象工厂,工厂方法,原型模式,单例模式,组合模式,享元模式


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值