最简单的设计模式学习 Singleton模式.ppt_第1页
最简单的设计模式学习 Singleton模式.ppt_第2页
最简单的设计模式学习 Singleton模式.ppt_第3页
最简单的设计模式学习 Singleton模式.ppt_第4页
最简单的设计模式学习 Singleton模式.ppt_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

最简单的设计模式学习Singleton模式 学习设计模式 自然从最简单的模式入手 而最简单的模式便是Singleton 所以第一篇就来所以说Singleton模式 看完GOF和DesignpatternsinJava的书 感觉Singleton虽然简单 但是想写出一个好的Singleton也不是一上来就能写出来的 Singleton模式的用处自然是保证一个类只有一个唯一的实例 在建模中涉及到的只能有一个对象 例如Struts中的Action类就是一例 除此之外 Singleton还使得该对象只有一个全局访问点 这就是SIngleton的作用 说得比较抽象 我们来看一个简单Singleton的C 和Java的代码 C Singleton模式 类定义 1 classSingleton2 3 public 4 staticSingleton Instance 5 Singleton 6 7 private 8 Singleton 9 10 staticSingleton instance 11 方法实现 12 Singleton Singleton instance 0 13 14 Singleton Singleton 15 17 18 19 Singleton Singleton 20 21 22 23 24 Singleton Singleton Instance 25 26 if instance 0 27 instance newSingleton 28 29 30 returninstance 31 JavaSingleton模式 32 publicclassSingleton 34 privatestaticSingletoninstance 35 36 publicstaticSingletongetInstance 37 if instance null 38 instance newSingleton 39 40 returninstance 41 42 43 CreatesanewinstanceofSingleton 44 privateSingleton 45 46 通过上面的例子可以看出 Singleton的实现并不难 只要将构造函数访问域设为私有 然后添加一个静态引用和一个获得该应用的静态方法即可 其实在C 中定义一个全局静态变量也可以达到这个效果 但是像Java这样的语言就是能使用Singleton了 上面的程序有一个问题 就是只能运行在单线程的环境下 为此我在C 上作了个实验 首先 include 在SIngleton Instance 函数中增加一个Sleep 1000 程序如下 47 Singleton Singleton Instance 48 49 if instance 0 50 Sleep 1000 51 instance newSingleton 52 53 54 returninstance 55 然后在主函数中创建两个线程 程序如下 56 staticSingleton s1 0 s2 0 57 58 DWORDWINAPIThreadProc1 PVOID 59 60 s1 Singleton Instance 61 62 return0 63 64 65 DWORDWINAPIThreadProc2 PVOID 66 67 s2 Singleton Instance 68 69 return0 70 71 72 intmain intargc char argv 73 74 DWORDthreadID1 75 DWORDthreadID2 76 77 CreateThread NULL 0 ThreadProc1 NULL 0 85 这样修改后在运行程序 打印出来的s1和s2地址就不是同一个地址了 结果如下 0372D6800372E68Pressanykeytocontinue 可见当在多线程环境下使用这个Singleton就会出现创建不止一个实力的情况 所以我们需要给Singleton加锁 请看下面的代码 C Singleton模式 86 classSingleton87 88 public 89 staticSingleton Instance 90 virtual Singleton 91 92 private 93 Singleton 94 95 staticCMutexmutex 96 staticSingleton instance 97 98 Singleton Singleton instance 0 99 CMutexSingleton mutex 100 101 Singleton Singleton 102 103 104 105 106 Singleton Singleton 107 108 109 110 111 Singleton Singleton Instance 112 113 mutex Lock 114 115 if instance 0 116 Sleep 1000 117 instance newSingleton 118 119 120 mutex Unlock 121 122 returninstance 123 此外需要 include 并且在项目设置中要设置动态链接MFC库 JavaSingleton模式 124 publicclassSingleton 126 privatestaticSingletoninstance 127 privatestaticObjectlock Singleton class 128 129 publicstaticSingletongetInstance 130 synchronized lock 131 if instance null 132 instance newSingleton 133 134 retur

温馨提示

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

最新文档

评论

0/150

提交评论