第6讲 单例模式.ppt_第1页
第6讲 单例模式.ppt_第2页
第6讲 单例模式.ppt_第3页
第6讲 单例模式.ppt_第4页
第6讲 单例模式.ppt_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

TheSingletonPattern 单例模式 学习问题 在许多场合 我们希望某个类只能有一个实例 因为如果该类有多个实例同时存在可能会导致一些问题的出现 如 一个计算机系统可以有多台打印机 但打印机管理器只能有一个运行 每台打印机也只能有一个实例对象 以防止多个打印作业同时使用一台打印机 现在请大家设计一个类PrintSpooler 这个类仅能存在一个实例 如何创建一个对象 假设你的类为MyObject 你怎样创建一个对象 NewMyObject 如果另一个对象想创建一个MyObject对象 他是不是可以再对MyObject调用new操作 如果该类是public的 就可以 如果该类不是public的 则只有同一个包中的类可以将它实例化 但是仍然可以将它实例化多次 如何创建一个对象 你可不可以这样做 PublicclassMyClass privateMyClass 讨论 这个类能被实例化吗 讨论 有没有对象可以调用构造方法MyClass 如何创建一个对象 下面的代码意味着什么 PublicclassMyClass publicstaticMyClassgetInstance MyClass是一个具有静态方法的类 可以这样调用其静态方法 MyClass getInstance 如何创建一个对象 如果我们把上面两段代码和在一起会怎么样 PublicclassMyClass privateMyClass publicstaticMyClassgetInstance 那么 是不是有另一种实例化一个对象的方法呢 实例化一个对象 PublicclassMyClass privatestaticMyClassuniqueInstance 其他成员变量声明privateMyClass publicstaticMyClassgetInstance if uniqueInstance null uniqueInstance newMyClass returnuniqueInstance 其他成员方法声明 类MyClass是不是只能有一个实例对象 懒汉式单例类 PublicclassLazySingleton privatestaticMyClassuniqueInstance 其他成员变量声明privateLazySingleton publicstaticMyClassgetInstance if uniqueInstance null uniqueInstance newLazySingleton returnuniqueInstance 其他成员方法声明 类LazySingleton只在第一次被引用时才实例化 静态加载该类并不会将他自己实例化 单例模式的关键特征 意图 希望类只有一个实例 但没有控制类实例化的全局变量 对象 同时希望确保所有客体对象使用该类的相同实例 而无需将引用传给它们 问题 几个不同的客户对象需要引用同一个对象 而且希望确保这种类型的对象数目不超过一个 解决方案 保证一个实例 单例模式的关键特征 参与者与协作者 客户对象只能通过getInstance 方法创建单例类的实例 效果 客户对象无需操心是否存在单例类的实例 实例化有单例类自己控制 实现 一个引用单例对象的静态私有成员变量一个公共静态方法 负责实现一次性的实例化并返回对单例对象的引用设置为保护或私有的构造方法 单例模式通用结构图 creates Java中的单例模式Runtime 查看APIRuntime应用实例 在java中启动应用程序 多线程问题 如果程序在多线程环境下运行 上述单例类难以保证只被实例化一次 一旦发生 可能出现的问题见p258如何改进 处理多线程 publicclassSingleton PrivatestaticSingletonuniqueInstance PrivateSingleton PublicstaticsynchronizedSingletongetInstance if uniqueInstance null uniqueInstance newSingleton returnuniqueInstance Double CheckedLocking模式 publicclassDCLSingleton PrivatevolatilestaticDCLSingletonuniqueInstance PrivateDCLSingleton PublicstaticDCLSingletongetInstance if uniqueInstance null synchronized DCLSingleton calss if uniqueInstance null uniqueInstance newDCLSingleton returnuniqueInstance 在创建对象之前 添加一次检查 避免不必要的锁定 提高效率 饿汉式单例类 PublicclassEagerSingleton privatestaticfinalEagerSingletonuniqueInstance newEagerSingleton privateEagerSingleton publicstaticEagerS

温馨提示

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

评论

0/150

提交评论