C#设计模式-单例模式

C#设计模式-单例模式

ID:38831545

大小:3.14 MB

页数:23页

时间:2019-06-20

C#设计模式-单例模式_第1页
C#设计模式-单例模式_第2页
C#设计模式-单例模式_第3页
C#设计模式-单例模式_第4页
C#设计模式-单例模式_第5页
资源描述:

《C#设计模式-单例模式》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、DesignPatterns单例模式刘伟(Sunny)weiliu_china@126.com大纲单例模式概述单例模式的结构与实现单例模式的应用实例饿汉式单例与懒汉式单例单例模式的优缺点与适用环境单例模式概述Windows任务管理器在正常情况下只能打开唯一一个任务管理器!单例模式概述如何保证一个类只有一个实例并且这个实例易于被访问?(1)全局变量:可以确保对象随时都可以被访问,但不能防止创建多个对象(2)让类自身负责创建和保存它的唯一实例,并保证不能创建其他实例,它还提供一个访问该实例的方法单例模式单例模式概述单例模式的定义对象创建型模式单例模式:确保一个类只有一个实例,并提供一个全

2、局访问点来访问这个唯一实例。SingletonPattern:Ensureaclasshasonlyoneinstance,andprovideaglobalpointofaccesstoit.Onlyone!单例模式概述单例模式的定义要点:某个类只能有一个实例必须自行创建这个实例必须自行向整个系统提供这个实例单例模式的结构与实现单例模式的结构单例模式的结构与实现单例模式的结构单例模式只包含一个单例角色:Singleton(单例)单例模式的结构与实现单例模式的实现私有构造函数静态私有成员变量(自身类型)静态公有的工厂方法classSingleton{privatestaticSing

3、letoninstance=null;//静态私有成员变量//私有构造函数privateSingleton(){}//静态公有工厂方法,返回唯一实例publicstaticSingletonGetInstance(){if(instance==null)instance=newSingleton();returninstance;}}单例模式的应用实例实例说明某软件公司承接了一个服务器负载均衡(LoadBalance)软件的开发工作,该软件运行在一台负载均衡服务器上,可以将并发访问和数据流量分发到服务器集群中的多台设备上进行并发处理,提高了系统的整体处理能力,缩短了响应时间。由于集群

4、中的服务器需要动态删减,且客户端请求需要统一分发,因此需要确保负载均衡器的唯一性,只能有一个负载均衡器来负责服务器的管理和请求的分发,否则将会带来服务器状态的不一致以及请求分配冲突等问题。如何确保负载均衡器的唯一性是该软件成功的关键,试使用单例模式设计服务器负载均衡器。单例模式的应用实例实例类图服务器负载均衡器结构图单例模式的应用实例实例代码(1)LoadBalancer:负载均衡器类,充当单例角色(2)Program:客户端测试类演示……参考代码(DesignPatternSingletonSample)单例模式的应用实例结果及分析饿汉式单例与懒汉式单例饿汉式单例类饿汉式单例类(

5、EagerSingleton)饿汉式单例与懒汉式单例饿汉式单例类饿汉式单例类(EagerSingleton)classEagerSingleton{privatestaticEagerSingletoninstance=newEagerSingleton();privateEagerSingleton(){}publicstaticEagerSingletonGetInstance(){returninstance;}}饿汉式单例与懒汉式单例懒汉式单例类与双重检查锁定懒汉式单例类(LazySingleton)饿汉式单例与懒汉式单例懒汉式单例类与双重检查锁定双重检查锁定classSin

6、gleton{privatestaticSingletoninstance=null;privateSingleton(){}publicstaticSingletonGetInstance(){if(instance==null)instance=newSingleton();returninstance;}}多个线程同时访问将导致创建多个单例对象!怎么办?饿汉式单例与懒汉式单例懒汉式单例类与双重检查锁定双重检查锁定classLazySingleton{privatestaticLazySingletoninstance=null;//程序运行时创建一个静态只读的辅助对象priva

7、testaticreadonlyobjectsyncRoot=newobject();privateLazySingleton(){}publicstaticLazySingletonGetInstance(){//第一重判断,先判断实例是否存在,不存在再加锁处理if(instance==null){//加锁的程序在某一时刻只允许一个线程访问lock(syncRoot){//第二重判断if(instance==null){instance=newLazyS

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。