惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
Darknet – Hacking Tools, Hacker News & Cyber Security
Jina AI
Jina AI
博客园_首页
J
Java Code Geeks
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 司徒正美
Hugging Face - Blog
Hugging Face - Blog
S
SegmentFault 最新的问题
MyScale Blog
MyScale Blog
P
Proofpoint News Feed
L
Lohrmann on Cybersecurity
Forbes - Security
Forbes - Security
大猫的无限游戏
大猫的无限游戏
Vercel News
Vercel News
Y
Y Combinator Blog
Google DeepMind News
Google DeepMind News
The Register - Security
The Register - Security
N
News | PayPal Newsroom
S
Security Archives - TechRepublic
量子位
Cisco Talos Blog
Cisco Talos Blog
V
V2EX
C
Cisco Blogs
The Cloudflare Blog
Stack Overflow Blog
Stack Overflow Blog
L
LangChain Blog
Scott Helme
Scott Helme
S
Securelist
Security Latest
Security Latest
爱范儿
爱范儿
TaoSecurity Blog
TaoSecurity Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
I
Intezer
L
LINUX DO - 最新话题
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
C
Check Point Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
美团技术团队
Know Your Adversary
Know Your Adversary
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
PCI Perspectives
PCI Perspectives
月光博客
月光博客
T
Tailwind CSS Blog
Cloudbric
Cloudbric
小众软件
小众软件
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
K
Kaspersky official blog
D
DataBreaches.Net
博客园 - 【当耐特】
有赞技术团队
有赞技术团队

博客园 - zhanqiangz(闲云野鹤)

在ReportService2005.asmx 找不到 ReportingService2005 类 BizTalk相关的问题,打算持续更新。 恢复被格式化过的硬盘数据 BizTalk - Most possible reason for “is Delimiters are not unique” in EDI transaction What happens if BizTalk artifacts are not GACed? XmlSerializer is not trustable BizTalk - How to create custom functoid. BizTalk - Carefully use Send Port Group BizTalk - How to debug map in VS2005 BizTalk-Get to know functoid. BizTalk - String Functoids 一辈子都忘不了的七夕节 Global.asax文件里的Application_Init能触发吗? 使用HttpApplication实例(翻译) Head First Design patterns笔记-Decorator Patterns (从”用不同技能武装自己”看装饰模式) Head First Design patterns笔记-Observer Patterns (从TFS的Project alerts功能看观察者模式) ASP.NET 2.0的编译行为 Head First Design patterns笔记-Strategy Patterns (从不同的人使用不同的交通工具上班看策略模式) 晕菜了,TFS居然把vss里的那个rollback功能cut掉了,还好有人写了工具.
Head First Design patterns笔记-Singleton patterns (从“一夫一妻制社会中婚约的达成”看单件模式)
zhanqiangz(闲云野鹤) · 2007-06-10 · via 博客园 - zhanqiangz(闲云野鹤)

定义:The singleton pattern ensures a class has only one instance, and provides a global point of access to it.

背景介绍:  在“一夫一妻”制的社会中,受道德约束,每个人(虽然本例是用girl’s engagement,但是实际不论对于男人或者女生都是成立的,^_^。)一旦有了婚约就不应该再接受其他的婚约。不知道现在还有没有“指腹为婚”和“娃娃亲”,虽然这与现在提倡的“婚姻自由,自主婚姻”等观念格格不入,但是与“一夫一妻”制度是没有冲突的,而且对于本例是很有用的。“指腹为婚”和“娃娃亲”映射到本例,就是early created singleton objectGirlsEngagement实例在外界访问以前已经存在了,所以大家不要再去试图追求一个从小就有了婚约的人。现实生活中并不是一个追求者去追一个被追求者这么简单,更多的时候可能是一对多的关系,多个人同时追求一个人(多线程问题),这个时候会出现非常非常多的问题,如果没有任何限制,这个被追求者同时有了多个婚约,后果真的不堪设想啊!轻则会有各种各样的纠纷,重则可能会搞得头破血流,你死我活。追求一个自己心仪的对象如果想更大可能性拿到婚约,最好是让别人知道某人正在被你追,但是这个时候你也要搞清楚,你喜欢的人是不是已经有了婚约,别跟大家说你要追某MM,结果发现人家早在一年前就订婚了(加了锁,然后发现girl's engagement已经创建了),最后不得不中途退出。英明的人总是做double check, 先看你心仪的对象有没有婚约,如果没有就加锁,表明你的MM已经名花有主。彪悍的人不管MM有没有婚约甚至不管人家是不是已经结婚,总是要加锁,然后去达成和MM的婚约―――当然这个和本文的singleton pattern没有关系,^_^那么对于本例来说,全局访问点是什么呢?因为你和一个人有了婚约后才可以实现的东西都应该属于全局访问点的范畴,比如你因为有了婚约所以每年都需要到对方的家里拜访,比如别人因为知道你们有了婚约而对你们时常一起散步不再感到奇怪等等。

实例代码:

查看代码

解释部分:
我尝试过使用多线程试图证实如果不加锁会生成多个singleton类的实例,但是很难成功,^_^,所以就把那部分代码删除了,如果谁能有好的办法证实这个问题,希望能告诉我。

对于单件中的加锁机制,大家可以参考《c#线程参考手册》,加锁的方式以及优劣分析的比较多。

Q/A:
1. 单件模式是不是应该用来继承,也就是把构造函数声明成protected?
不应该,因为一旦有了继承就会出现多个子类指向父类中 一个静态对象的引用,这不是我们想要的。

2.为什么不用静态全局变量代替单件模式?
静态全局变量只能在应用程序初始化的时候赋值,失去了单件模式中对象实时创建的灵活性,在资源比较珍贵的场景中尤其不是适合。

posted @ 2007-06-10 11:55  zhanqiangz(闲云野鹤)  阅读(2496)  评论()    收藏  举报