设计模式单例模式实用教案_第1页
设计模式单例模式实用教案_第2页
设计模式单例模式实用教案_第3页
设计模式单例模式实用教案_第4页
设计模式单例模式实用教案_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、大纲(dgng)w 单例模式概述w 单例模式的结构与实现w 单例模式的应用实例(shl)w 饿汉式单例与懒汉式单例w 单例模式的优缺点与适用环境第1页/共23页第一页,共23页。单例模式(msh)概述Windows任务任务(rn wu)管理器管理器在正常情况下只能打开唯一(wi y)一个任务管理器!第2页/共23页第二页,共23页。单例模式(msh)概述 如何保证一个类只有一个实例并且这个实例易于(yy)被访问? (1) 全局变量:可以确保对象随时都可以被访问,但不能防止创建多个对象 (2) 让类自身负责创建和保存它的唯一实例,并保证不能创建其他实例,它还提供一个访问该实例的方法第3页/共23

2、页第三页,共23页。单例模式(msh)概述 单例模式的定义 对象(duxing)创建型模式单例模式:单例模式:确保一个类只有一个实例只有一个实例,并提供一个全局访全局访问点问点来访问这个唯一实例。Singleton Pattern: Ensure a class has only one instance, and provide a global point of access to it.第4页/共23页第四页,共23页。单例模式(msh)概述 单例模式的定义(dngy) 要点: 某个类只能有一个实例 必须自行创建这个实例 必须自行向整个系统提供这个实例第5页/共23页第五页,共23页。单

3、例模式(msh)的结构与实现 单例模式(msh)的结构第6页/共23页第六页,共23页。单例模式(msh)的结构与实现 单例模式的结构 单例模式只包含一个(y )单例角色: Singleton(单例)第7页/共23页第七页,共23页。单例模式的结构(jigu)与实现 单例模式的实现 私有构造函数 静态私有成员变量(自身(zshn)类型) 静态公有的工厂方法class Singleton private static Singleton instance=null; /静态私有成员静态私有成员变量变量 /私有构造函数私有构造函数 private Singleton() /静态公有工厂方法,返回唯

4、一实例静态公有工厂方法,返回唯一实例 public static Singleton GetInstance() if(instance=null) instance=new Singleton(); return instance; 第8页/共23页第八页,共23页。单例模式(msh)的应用实例 实例(shl)说明某软件公司承接了一个服务器负载均衡(Load Balance)软件的开发工作,该软件运行在一台负载均衡服务器上,可以将并发访问和数据流量分发到服务器集群中的多台设备上进行并发处理,提高了系统的整体处理能力,缩短了响应时间。由于集群中的服务器需要动态删减,且客户端请求需要统一分发,因

5、此需要确保负载均衡器的唯一性,只能有一个负载均衡器来负责服务器的管理和请求的分发,否则将会带来服务器状态的不一致以及请求分配冲突等问题。如何确保负载均衡器的唯一性是该软件成功的关键,试使用单例模式设计服务器负载均衡器。第9页/共23页第九页,共23页。单例模式的应用(yngyng)实例 实例(shl)类图服务器负载(fzi)均衡器结构图第10页/共23页第十页,共23页。单例模式(msh)的应用实例 实例代码 (1) LoadBalancer:负载均衡器类,充当单例角色( ju s) (2) Program:客户端测试类演示演示参考参考(cnko)代码代码 (DesignPatternSing

6、letonSample)第11页/共23页第十一页,共23页。单例模式的应用(yngyng)实例 结果( ji gu)及分析第12页/共23页第十二页,共23页。饿汉( hn)式单例与懒汉式单例 饿汉( hn)式单例类 饿汉( hn)式单例类(Eager Singleton)第13页/共23页第十三页,共23页。饿汉( hn)式单例与懒汉式单例 饿汉( hn)式单例类 饿汉( hn)式单例类(Eager Singleton)class EagerSingleton private static EagerSingleton instance = new EagerSingleton(); pr

7、ivate EagerSingleton() public static EagerSingleton GetInstance() return instance; 第14页/共23页第十四页,共23页。饿汉( hn)式单例与懒汉式单例 懒汉式单例类与双重检查( jinch)锁定 懒汉式单例类(Lazy Singleton)第15页/共23页第十五页,共23页。饿汉( hn)式单例与懒汉式单例 懒汉(lnhn)式单例类与双重检查锁定 双重检查锁定class Singleton private static Singleton instance=null; private Singleton()

8、 public static Singleton GetInstance() if(instance=null) instance=new Singleton(); return instance; 多个线程同时(tngsh)访问将导致创建多个单例对象!怎么办?第16页/共23页第十六页,共23页。饿汉( hn)式单例与懒汉式单例 懒汉式单例类与双重(shungchng)检查锁定 双重(shungchng)检查锁定class LazySingleton private static LazySingleton instance = null; /程序运行时创建一个静态只读的辅助对象程序运行时创

9、建一个静态只读的辅助对象private static readonly object syncRoot = new object();private LazySingleton() public static LazySingleton GetInstance() /第一重判断,先判断实例是否存在,不存在再加锁处理第一重判断,先判断实例是否存在,不存在再加锁处理if (instance = null) /加锁的程序在某一时刻只允许一个线程访问加锁的程序在某一时刻只允许一个线程访问lock(syncRoot) /第二重判断第二重判断 if(instance=null) instance = ne

10、w LazySingleton(); /创建单例实例创建单例实例return instance; 双重检查(jinch)锁定第17页/共23页第十七页,共23页。饿汉( hn)式单例与懒汉式单例 饿汉( hn)式单例类与懒汉式单例类比较 饿汉( hn)式单例类:无须考虑多个线程同时访问的问题;调用速度和反应时间优于懒汉式单例;资源利用效率不及懒汉式单例;系统加载时间可能会比较长 懒汉式单例类:实现了延迟加载;必须处理好多个线程同时访问的问题;需通过双重检查锁定等机制进行控制,将导致系统性能受到一定影响第18页/共23页第十八页,共23页。单例模式(msh)的优缺点与适用环境 模式优点 提供了对唯一实例的受控访问(fngwn) 可以节约系统资源,提高系统的性能 允许可变数目的实例(多例类)第19页/共23页第十九页,共23页。单例模式(msh)的优缺点与适用环境 模式缺点 扩展困难(缺少抽象层) 单例类的职责过重 由于(yuy)自动垃圾回收机制,可能会导致共享的单例对象的状态丢失第20页/共23页第二十页,共23页。单例模式的优缺点与适用(shyng)环境

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论