博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
保证一个类仅有一个实例:单例模式
阅读量:6871 次
发布时间:2019-06-26

本文共 653 字,大约阅读时间需要 2 分钟。

场景:微软的windows xp操作系统,ctrl+alt+del键都会弹出一个windows任务管理器(这时不关闭这个任务管理器),继续ctrl+alt+del键还是一个windows任务管理器。鉴于本人水平有限,上面的场景举例可能不合适,但是很接近一个基本的设计模式:单例模式。Code is cheap.下面用c#代码模拟出一个类似任务管理器的创建:

ContractedBlock.gif
Code
上面创建实例的基本思想是new一个对象的时候,判断静态的类变量是否已经有实例,构造函数私有,这样外部代码不能直接new来实例化对象。这是因为我们都知道所有类都有构造函数,不编码写构造函数则系统默认生成无参数的构造方法,但如果有显式定义的构造方法,默认的就会失效。ps:在定义可序列化的类的时候,默认构造函数是必须的,所以如果你显式定义了一个带参数的构造方法,一定不能忘记要再写一个没有参数的构造方法。
好了,上面的代码ms已经简单的实现了对唯一实例的受控访问。不过在多线程的程序中,上面的代码会有可能创建多个实例的。给进程加把锁,用lock解决一下:
ContractedBlock.gif
Code
上面那种做法可以创建单一实例,可是每次调用创建方法时,都要lock,影响性能,有一种双重锁定的方法:
ContractedBlock.gif
Code
最后再看一个所谓的饿汉式单例类:
ContractedBlock.gif
Code
本文转自JeffWong博客园博客,原文链接:http://www.cnblogs.com/jeffwongishandsome/archive/2009/03/14/1411570.html
,如需转载请自行联系原作者
你可能感兴趣的文章
(筆記) DE2與SDRAM相關資料總整理 (SOC) (DE2)
查看>>
(原創) 如何以10進位顯示8位數的七段顯示器? (SOC) (Verilog) (DE2)
查看>>
MetaModelEngine:元模型引擎开发思路
查看>>
STM32对内部Flash的保护措施
查看>>
QT练习4:编写一个查找对话框
查看>>
三道笔试题
查看>>
提升软件开发者生产力的 10 个提示
查看>>
利用Ffmpeg获得flv视频缩略图和视频时间的代码
查看>>
Markdown 11种基本语法
查看>>
LINQ 简单用法【1】
查看>>
【JavaScript学习笔记】hello world
查看>>
SharePoint 2007 采用表单验证 一段源码
查看>>
如何检查DirectX的版本(用于Windows Phone Developer Tools的安装检查)
查看>>
Convert Object to XML using LINQ
查看>>
2岁半的儿子
查看>>
最近看的关于EF的文章
查看>>
Java之内存分析和String对象
查看>>
《代码大全》阅读笔记-24-重构
查看>>
Ubuntu 11.10 快捷键
查看>>
14委托和事件在观察者模式中更好的写法
查看>>