﻿<?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>BlogJava-@OverWrite BlogJava&lt;br&gt;&lt;hr&gt;&lt;a href='http://www.vesung.cn'&gt;了解更多请访问我的主页www.vesung.cn&lt;/a&gt;-随笔分类-设计模式</title><link>http://www.blogjava.net/vesung/category/29733.html</link><description>@author&lt;a href='mailto:vesung@gmail.com'&gt;wangjing&lt;/a&gt;</description><language>zh-cn</language><lastBuildDate>Sat, 01 Mar 2008 13:33:16 GMT</lastBuildDate><pubDate>Sat, 01 Mar 2008 13:33:16 GMT</pubDate><ttl>60</ttl><item><title>单例模式</title><link>http://www.blogjava.net/vesung/archive/2008/02/29/182985.html</link><dc:creator>wangjing</dc:creator><author>wangjing</author><pubDate>Fri, 29 Feb 2008 08:52:00 GMT</pubDate><guid>http://www.blogjava.net/vesung/archive/2008/02/29/182985.html</guid><wfw:comment>http://www.blogjava.net/vesung/comments/182985.html</wfw:comment><comments>http://www.blogjava.net/vesung/archive/2008/02/29/182985.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/vesung/comments/commentRss/182985.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/vesung/services/trackbacks/182985.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;需求：一方面要求某类只能存在单一的对象实例（从概念上来说，就是一组静态方法和字段），另一方面又要求该实例的使用与普通对象一样，单例模式就是这两个要求之间的平衡。<br />
&nbsp;&nbsp;&nbsp;&nbsp;单例模式通过使用私有构造函数保证了一个类只能存在一个实例，类中的某个静态方法用于返回类的唯一实例。以下的Widget类就是一个单例：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_19_219_Open_Image" onclick="this.style.display='none'; Codehighlighter1_19_219_Open_Text.style.display='none'; Codehighlighter1_19_219_Closed_Image.style.display='inline'; Codehighlighter1_19_219_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_19_219_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_19_219_Closed_Text.style.display='none'; Codehighlighter1_19_219_Open_Image.style.display='inline'; Codehighlighter1_19_219_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Widget</span><span id="Codehighlighter1_19_219_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_19_219_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;Widget&nbsp;instance&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Widget();<br />
<img id="Codehighlighter1_110_140_Open_Image" onclick="this.style.display='none'; Codehighlighter1_110_140_Open_Text.style.display='none'; Codehighlighter1_110_140_Closed_Image.style.display='inline'; Codehighlighter1_110_140_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_110_140_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_110_140_Closed_Text.style.display='none'; Codehighlighter1_110_140_Open_Image.style.display='inline'; Codehighlighter1_110_140_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;Widget&nbsp;getInstance()</span><span id="Codehighlighter1_110_140_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_110_140_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;instance;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_162_163_Open_Image" onclick="this.style.display='none'; Codehighlighter1_162_163_Open_Text.style.display='none'; Codehighlighter1_162_163_Closed_Image.style.display='inline'; Codehighlighter1_162_163_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_162_163_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_162_163_Closed_Text.style.display='none'; Codehighlighter1_162_163_Open_Image.style.display='inline'; Codehighlighter1_162_163_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Widget()</span><span id="Codehighlighter1_162_163_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_162_163_Open_Text"><span style="color: #000000">{}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_193_217_Open_Image" onclick="this.style.display='none'; Codehighlighter1_193_217_Open_Text.style.display='none'; Codehighlighter1_193_217_Closed_Image.style.display='inline'; Codehighlighter1_193_217_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_193_217_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_193_217_Closed_Text.style.display='none'; Codehighlighter1_193_217_Open_Image.style.display='inline'; Codehighlighter1_193_217_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;doSomething()</span><span id="Codehighlighter1_193_217_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_193_217_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" />&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
&nbsp; Widget的构造函数是私有的，这以为着只有静态方法getInstance（）能够创建Widget对象。由于instance字段是静态的，所以它被定义为唯一的实例。第一次调用getInstance（）方法创建一个新的Widget对象实例，而后续所有的调用都将会返回这唯一的对象实例。<br />
&nbsp; 单例模式可以去掉不必要的对象创建过程。
 <img src ="http://www.blogjava.net/vesung/aggbug/182985.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/vesung/" target="_blank">wangjing</a> 2008-02-29 16:52 <a href="http://www.blogjava.net/vesung/archive/2008/02/29/182985.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>