欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

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

    • 资源ID:80589748       资源大小:100KB        全文页数:16页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    The Singleton Pattern(单例模式)学习问题n在许多场合,我们希望某个类只能有一个实例。因为如果该类有多个实例同时存在可能会导致一些问题的出现。如:一个计算机系统可以有多台打印机,但打印机管理器只能有一个运行,每台打印机也只能有一个实例对象。如何创建一个对象n假设你的类为MyObject,你怎样创建一个对象?nnew MyObject();n如果另一个对象想创建一个MyObject对象,他是不是可以再对MyObject调用new操作?n如果该类是public的,就可以。n如果该类不是public的,则只有同一个包中的类可以将它实例化,但是仍然可以将它实例化多次。如何创建一个对象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 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 LazySingleton private static MyClass uniqueInstance;/其他成员变量声明 private LazySingleton()public static MyClass getInstance()if(uniqueInstance=null)uniqueInstance=new LazySingleton();return uniqueInstance /其他成员方法声明n类LazySingleton只在第一次被引用时才实例化,静态加载该类并不会将他自己实例化。单例模式的关键特征n意图:希望类只有一个实例,但没有控制类实例化的全局变量(对象)。同时希望确保所有客体对象使用该类的相同实例,而无需将引用传给它们。n问题:几个不同的客户对象需要引用同一个对象,而且希望确保这种类型的对象数目不超过一个。n解决方案:保证一个实例单例模式的关键特征n参与者与协作者:客户对象只能通过getInstance()方法创建单例类的实例。n效果:客户对象无需操心是否存在单例类的实例,实例化有单例类自己控制。n实现:n一个引用单例对象的静态私有成员变量n一个公共静态方法,负责实现一次性的实例化并返回对单例对象的引用n设置为保护或私有的构造方法单例模式通用结构图Singleton-static uniqueInstance-otherVariable-Singleton()+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 uniqueInstance;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 uniqueInstance;在创建对象之前,添加一次检查,避免不必要的锁定,提高效率。饿汉式单例类Public class EagerSingleton private static final EagerSingleton uniqueInstance=new EagerSingleton();private EagerSingleton()public static EagerSingleton getInstance()return uniqueInstance n类EagerSingleton在加载时就马上将自己实例化。n可以解决多线程的问题进一步思考的问题n如何编写一个最多实例化指定个数(如2个)实例的类?

    注意事项

    本文(02 设计模式02 (单例模式).ppt)为本站会员(qwe****56)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开