海边的贝壳
来源: BlogBus 原始链接: http://www.blogbus.com:80/blogbus/blog/diary.php?diaryid=136253 存档链接: https://web.archive.org/web/20050101133706id_/http://www.blogbus.com:80/blogbus/blog/diary.php?diaryid=136253
海边的贝壳 “我好像是在海上玩耍,时而发现了一个光滑的石子儿, 时而发现了一个美丽贝壳而为之高兴的孩子。 尽管如此,那真理的海洋还是神秘地展现在我们面前。” ――伊萨克・牛顿 <<<维基百科繁简体转换的设想 | 首页 | Wiki资料:刘韧―WikiWiki 快点快点>>> 单例模式 mountain @ 2004-04-12 下文的原始出处在 维基百科 ,这个条目由我重新撰写,主要内容来英文版对应的条目的翻译。 单例模式 是一种 软件设计模式 ,当我们应用这个模式时,我们限制一个 类 只能实例化为一个或少数几个 对象 。许多时候整个系统只拥有一个的全局对象有利于我们协调系统整体的行为。系统的全局对象可以考虑使用单例模式来创建。 实现单例模式的思路是:一个类有一个引用和一个获得类该实例的方法(通常使用getInstance这个名称);当我们调用这个方法时,如果类保持的引用不为空就返回这个引用,如果类保持的引用为空就创建该类的实例并将实例的引用赋予该类保持的引用;同时我们还将该类的 构造函数 定义为私有方法,这样其他处的代码就无法通过调用该类的构造函数来实例化该类的对象,只有通过该类提供的指定方法来得到该类的唯一实例。 单例模式在 多线程 的应用场合下必须小心使用。如果当唯一实例尚未创建时,有两个线程同时调用创建方法,那么它们同时没有检测到唯一实例的存在,从而同时各自创建了一个实例,这样就有两个实例被构造出来,从而违反了单例模式中实例唯一的原则。 解决这个问题的办法是为指示类是否已经实例化的变量提供一个互斥锁。 在 Java编程语言 中,单例模式应用的例子如下述代码所示: public class Singleton { private static final Singleton INSTANCE = new Singleton(); // Private constructor suppresses // default public constructor private Singleton() {}
public static Singleton getInstance() { return INSTANCE; } } 在 C++编程语言 中,单例模式应用的例子如下述代码所示(这里仅仅提供一个示例,这个例子对多线程的情况并不是安全的): template class Singleton { public: static T& Instance() { if(!m_instance) { static T theSingleInstance; //assumes T has a default constructor m_instance = &theSingleInstance; } return m_instance; } private: static T m_instance; }; class OnlyOne : public Singleton { //..rest of interface defined here }; [ 编辑 ] 站外链接 A Q&A page (java.sun.com) 引用(0) 评论 XML blogger del.icio.us furl.net Wikipedia 发表评论 最后更新 来自Wikipedia最初创办者的批评 新年快乐 串联我们的爱心 小行星可能要撞地球 大灾难和维基百科 2014年的互联网 UML与DSL的争论 Ongoing关于维基百科的评论 维基百科的入门与提高 是大家的,而不只是专家的 <<<维基百科繁简体转换的设想 | 首页 | Wiki资料:刘韧―WikiWiki 快点快点>>>