最简单的设计模式学习 Singleton模式.ppt

上传人:asd****56 文档编号:87323139 上传时间:2023-04-16 格式:PPT 页数:16 大小:231.50KB
返回 下载 相关 举报
最简单的设计模式学习 Singleton模式.ppt_第1页
第1页 / 共16页
最简单的设计模式学习 Singleton模式.ppt_第2页
第2页 / 共16页
点击查看更多>>
资源描述

《最简单的设计模式学习 Singleton模式.ppt》由会员分享,可在线阅读,更多相关《最简单的设计模式学习 Singleton模式.ppt(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、最简单的设计模式学习 Singleton模式学习设计模式,自然从最简单的模式入手,而最简单的模式便是Singleton。所以第一篇就来所以说Singleton模式。看完GOF和Design patterns in Java的书,感觉Singleton虽然简单,但是想写出一个好的Singleton也不是一上来就能写出来的。Singleton模式的用处自然是保证一个类只有一个唯一的实例。在建模中涉及到的只能有一个对象,例如Struts中的Action类就是一例。除此之外,Singleton还使得该对象只有一个全局访问点。这就是SIngleton的作用。说得比较抽象,我们来看一个简单Singleto

2、n的C+和Java的代码:C+Singleton模式:类定义:1.class Singleton2.3.public:4.static Singleton*Instance();5.Singleton();6.7.private:8.Singleton();9.10.static Singleton*instance;11.;方法实现:12.Singleton*Singleton:instance=0;13.14.Singleton:Singleton()15.17.18.19.Singleton:Singleton()20.21.22.23.24.Singleton*Singleton:In

3、stance()25.26.if(instance=0)27.instance=new Singleton();28.29.30.return instance;31.Java Singleton模式:32.public class Singleton 34.private static Singleton instance;35.36.public static Singleton getInstance()37.if(instance=null)38.instance=new Singleton();39.40.return instance;41.42.43./*/*Creates a

4、new instance of Singleton*/44.private Singleton()45.46.通过上面的例子可以看出,Singleton的实现并不难,只要将构造函数访问域设为私有,然后添加一个静态引用和一个获得该应用的静态方法即可。其实在C+中定义一个全局静态变量也可以达到这个效果,但是像Java这样的语言就是能使用Singleton了。上面的程序有一个问题,就是只能运行在单线程的环境下。为此我在C+上作了个实验。首先#include。在SIngleton:Instance()函数中增加一个Sleep(1000),程序如下:47.Singleton*Singleton:Inst

5、ance()48.49.if(instance=0)50.Sleep(1000);51.instance=new Singleton();52.53.54.return instance;55.然后在主函数中创建两个线程,程序如下:56.static Singleton*s1=0,*s2=0;57.58.DWORD WINAPI ThreadProc1(PVOID)59.60.s1=Singleton:Instance();61.62.return 0;63.64.65.DWORD WINAPI ThreadProc2(PVOID)66.67.s2=Singleton:Instance();6

6、8.69.return 0;70.71.72.int main(int argc,char*argv)73.74.DWORD threadID1;75.DWORD threadID2;76.77.CreateThread(NULL,0,ThreadProc1,NULL,0,&threadID1);78.CreateThread(NULL,0,ThreadProc2,NULL,0,&threadID2);79.80.Sleep(10000);81.82.std:cout s1 s2;83.84.return 0;85.这样修改后在运行程序,打印出来的s1和s2地址就不是同一个地址了。结果如下:0

7、372D68 00372E68Press any key to continue可见当在多线程环境下使用这个Singleton就会出现创建不止一个实力的情况,所以我们需要给Singleton加锁。请看下面的代码。C+Singleton模式:86.class Singleton87.88.public:89.static Singleton*Instance();90.virtual Singleton();91.92.private:93.Singleton();94.95.static CMutex mutex;96.static Singleton*instance;97.;98.Sing

8、leton*Singleton:instance=0;99.CMutex Singleton: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=new Singleton();118.119.120.mutex.Unlock();121.122.retu

9、rn instance;123.此外需要#include,并且在项目设置中要设置动态链接MFC库。Java Singleton模式:124.public class Singleton 126.private static Singleton instance;127.private static Object lock=Singleton.class;128.129.public static Singleton getInstance()130.synchronized(lock)131.if(instance=null)132.instance=new Singleton();133.134.return instance;135.136.137.138./*/*Creates a new instance of Singleton*/139.private Singleton()140.141.运用加锁就可以解决在多线程环境下使用Singleton模式所带来的问题了。java培训 http:/

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

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

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

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