﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-深蓝色的空间-随笔分类-设计模式</title><link>http://www.cppblog.com/ggggqqqqihc/category/6281.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 20 May 2008 16:49:13 GMT</lastBuildDate><pubDate>Tue, 20 May 2008 16:49:13 GMT</pubDate><ttl>60</ttl><item><title>单件模式的实现</title><link>http://www.cppblog.com/ggggqqqqihc/archive/2008/03/01/43532.html</link><dc:creator>Wang Jinbo</dc:creator><author>Wang Jinbo</author><pubDate>Sat, 01 Mar 2008 14:01:00 GMT</pubDate><guid>http://www.cppblog.com/ggggqqqqihc/archive/2008/03/01/43532.html</guid><wfw:comment>http://www.cppblog.com/ggggqqqqihc/comments/43532.html</wfw:comment><comments>http://www.cppblog.com/ggggqqqqihc/archive/2008/03/01/43532.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cppblog.com/ggggqqqqihc/comments/commentRss/43532.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/ggggqqqqihc/services/trackbacks/43532.html</trackback:ping><description><![CDATA[对于某些用途的类，必须确保在程序运行过程中最多只有一个实例。单件模式很适合这种场合。<br>单件模式实现的技巧是将构造函数私有化，这样就禁止了直接定义对象变量和用new生成对象。但将构造函数设为私有的话，又如何去生成那个唯一的对象呢？废话少说，先贴代码。<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;Singleton{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Singleton(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;"> more code</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;Singleton&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">thisInstance;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;"> more code</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;Singleton&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">getInstance();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;"> more code</span><span style="color: #008000;"><br></span><span style="color: #000000;">};<br>Singleton&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">Singleton::thisInstance</span><span style="color: #000000;">=</span><span style="color: #000000;">NULL;<br>Singleton&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">Singleton::getInstance(){<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(thisInstance</span><span style="color: #000000;">==</span><span style="color: #000000;">NULL)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;thisInstance</span><span style="color: #000000;">=</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Singleton();<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;thisInstance;<br>}</span></div>
<br>如此一来，要取得Singleton的实例，只能用getInstance函数。getInstance函数必须是静态（Static）的，这样才能在还没有实例的时候使用这个函数。而getInstance又是Singleton类里的函数，当然是可以在其中使用new来生成对象了。所以说虽然将类的构造函数私有化了，但构造函数本身还是有意义的，它会在构建第一个，也是唯一一个实例的时候执行。同时，保证了不会出现多于一个的实例。<br>     <img src ="http://www.cppblog.com/ggggqqqqihc/aggbug/43532.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/ggggqqqqihc/" target="_blank">Wang Jinbo</a> 2008-03-01 22:01 <a href="http://www.cppblog.com/ggggqqqqihc/archive/2008/03/01/43532.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>