02 设计模式02 (单例模式).ppt

上传人:qwe****56 文档编号:80589748 上传时间:2023-03-23 格式:PPT 页数:16 大小:100KB
返回 下载 相关 举报
02 设计模式02 (单例模式).ppt_第1页
第1页 / 共16页
02 设计模式02 (单例模式).ppt_第2页
第2页 / 共16页
点击查看更多>>
资源描述

《02 设计模式02 (单例模式).ppt》由会员分享,可在线阅读,更多相关《02 设计模式02 (单例模式).ppt(16页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、The Singleton Pattern(单例模式)学习问题n在许多场合,我们希望某个类只能有一个实例。因为如果该类有多个实例同时存在可能会导致一些问题的出现。如:一个计算机系统可以有多台打印机,但打印机管理器只能有一个运行,每台打印机也只能有一个实例对象。如何创建一个对象n假设你的类为MyObject,你怎样创建一个对象?nnew MyObject();n如果另一个对象想创建一个MyObject对象,他是不是可以再对MyObject调用new操作?n如果该类是public的,就可以。n如果该类不是public的,则只有同一个包中的类可以将它实例化,但是仍然可以将它实例化多次。如何创建一个对

2、象n你可不可以这样做?Public class MyClass private MyClass()n讨论:这个类能被实例化吗?n讨论:有没有对象可以调用构造方法MyClass()?如何创建一个对象n下面的代码意味着什么?Public class MyClass public static MyClass getInstance()nMyClass是一个具有静态方法的类,可以这样调用其静态方法:MyClass.getInstance();如何创建一个对象n如果我们把上面两段代码和在一起会怎么样?Public class MyClass private MyClass()public static

3、 MyClass getInstance()n那么,是不是有另一种实例化一个对象的方法呢?实例化一个对象Public class MyClass private static MyClass uniqueInstance;/其他成员变量声明 private MyClass()public static MyClass getInstance()if(uniqueInstance=null)uniqueInstance=new MyClass();return uniqueInstance /其他成员方法声明n类MyClass是不是只能有一个实例对象?懒汉式单例类Public class Laz

4、ySingleton private static MyClass uniqueInstance;/其他成员变量声明 private LazySingleton()public static MyClass getInstance()if(uniqueInstance=null)uniqueInstance=new LazySingleton();return uniqueInstance /其他成员方法声明n类LazySingleton只在第一次被引用时才实例化,静态加载该类并不会将他自己实例化。单例模式的关键特征n意图:希望类只有一个实例,但没有控制类实例化的全局变量(对象)。同时希望确保

5、所有客体对象使用该类的相同实例,而无需将引用传给它们。n问题:几个不同的客户对象需要引用同一个对象,而且希望确保这种类型的对象数目不超过一个。n解决方案:保证一个实例单例模式的关键特征n参与者与协作者:客户对象只能通过getInstance()方法创建单例类的实例。n效果:客户对象无需操心是否存在单例类的实例,实例化有单例类自己控制。n实现:n一个引用单例对象的静态私有成员变量n一个公共静态方法,负责实现一次性的实例化并返回对单例对象的引用n设置为保护或私有的构造方法单例模式通用结构图Singleton-static uniqueInstance-otherVariable-Singleton

6、()+static getInstance()+otherMethods()creates多线程问题n如果程序在多线程环境下运行,上述单例类难以保证只被实例化一次。一旦发生,可能出现问题n如何改进?处理多线程public class Singleton Private static Singleton uniqueInstance;Private Singleton()Public static synchronized Singleton getInstance()if(uniqueInstance=null)uniqueInstance=new Singleton();return uni

7、queInstance;Double-Checked Locking模式public class DCLSingleton Private volatile static DCLSingleton uniqueInstance;Private DCLSingleton()Public static DCLSingleton getInstance()if(uniqueInstance=null)synchronized(DCLSingleton.calss)if(uniqueInstance=null)uniqueInstance=new DCLSingleton();return uniqu

8、eInstance;在创建对象之前,添加一次检查,避免不必要的锁定,提高效率。饿汉式单例类Public class EagerSingleton private static final EagerSingleton uniqueInstance=new EagerSingleton();private EagerSingleton()public static EagerSingleton getInstance()return uniqueInstance n类EagerSingleton在加载时就马上将自己实例化。n可以解决多线程的问题进一步思考的问题n如何编写一个最多实例化指定个数(如2个)实例的类?

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 财经金融

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com