﻿<?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-greatjone-文章分类-模式</title><link>http://www.blogjava.net/greatjone/category/45202.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 03 Jun 2010 16:54:56 GMT</lastBuildDate><pubDate>Thu, 03 Jun 2010 16:54:56 GMT</pubDate><ttl>60</ttl><item><title>单例模式</title><link>http://www.blogjava.net/greatjone/articles/322509.html</link><dc:creator>jone</dc:creator><author>jone</author><pubDate>Wed, 02 Jun 2010 00:36:00 GMT</pubDate><guid>http://www.blogjava.net/greatjone/articles/322509.html</guid><wfw:comment>http://www.blogjava.net/greatjone/comments/322509.html</wfw:comment><comments>http://www.blogjava.net/greatjone/articles/322509.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/greatjone/comments/commentRss/322509.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/greatjone/services/trackbacks/322509.html</trackback:ping><description><![CDATA[<p>单例模式主要作用是保证在Java应用程序中，一个类只有一个实例存在。它的具体形式有如下两种：<br />
第一种：</p>
<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; height: 115px; background-color: #eeeeee"><span style="color: #008080">1</span><img id="Codehighlighter1_23_236_Open_Image" onclick="this.style.display='none'; Codehighlighter1_23_236_Open_Text.style.display='none'; Codehighlighter1_23_236_Closed_Image.style.display='inline'; Codehighlighter1_23_236_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_23_236_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_23_236_Closed_Text.style.display='none'; Codehighlighter1_23_236_Open_Image.style.display='inline'; Codehighlighter1_23_236_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;Singleton&nbsp;</span><span id="Codehighlighter1_23_236_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">2</span><span style="color: #000000"><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;Singleton&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;Singleton();</span><span style="color: #008000">//</span><span style="color: #008000">只有在类加载时进行一次初如化赋值</span><span style="color: #008000"><br />
</span><span style="color: #008080">3</span><span style="color: #008000"><img id="Codehighlighter1_117_118_Open_Image" onclick="this.style.display='none'; Codehighlighter1_117_118_Open_Text.style.display='none'; Codehighlighter1_117_118_Closed_Image.style.display='inline'; Codehighlighter1_117_118_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_117_118_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_117_118_Closed_Text.style.display='none'; Codehighlighter1_117_118_Open_Image.style.display='inline'; Codehighlighter1_117_118_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Singleton()</span><span id="Codehighlighter1_117_118_Open_Text"><span style="color: #000000">{}</span></span><span style="color: #008000">//</span><span style="color: #008000">采用私有的构造方法，使得外部不能构造新的实例</span><span style="color: #008000"><br />
</span><span style="color: #008080">4</span><span style="color: #008000"><img id="Codehighlighter1_182_234_Open_Image" onclick="this.style.display='none'; Codehighlighter1_182_234_Open_Text.style.display='none'; Codehighlighter1_182_234_Closed_Image.style.display='inline'; Codehighlighter1_182_234_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_182_234_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_182_234_Closed_Text.style.display='none'; Codehighlighter1_182_234_Open_Image.style.display='inline'; Codehighlighter1_182_234_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&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;Singleton&nbsp;getInstance()</span><span id="Codehighlighter1_182_234_Open_Text"><span style="color: #000000">{</span><span style="color: #008000">//</span><span style="color: #008000">采用static修饰，说明该方法不需先创建实例而直接调用</span><span style="color: #008000"><br />
</span><span style="color: #008080">5</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;instance;<br />
</span><span style="color: #008080">6</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">7</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
第二种：<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"><span style="color: #008080">&nbsp;1</span><img id="Codehighlighter1_23_270_Open_Image" onclick="this.style.display='none'; Codehighlighter1_23_270_Open_Text.style.display='none'; Codehighlighter1_23_270_Closed_Image.style.display='inline'; Codehighlighter1_23_270_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_23_270_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_23_270_Closed_Text.style.display='none'; Codehighlighter1_23_270_Open_Image.style.display='inline'; Codehighlighter1_23_270_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;Singleton&nbsp;</span><span id="Codehighlighter1_23_270_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><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;Singleton&nbsp;instance&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;</span><span style="color: #008000">//</span><span style="color: #008000">只有在类加载时进行一次初如化赋值&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #008000"><img id="Codehighlighter1_138_268_Open_Image" onclick="this.style.display='none'; Codehighlighter1_138_268_Open_Text.style.display='none'; Codehighlighter1_138_268_Closed_Image.style.display='inline'; Codehighlighter1_138_268_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_138_268_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_138_268_Closed_Text.style.display='none'; Codehighlighter1_138_268_Open_Image.style.display='inline'; Codehighlighter1_138_268_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&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;</span><span style="color: #0000ff">synchronized</span><span style="color: #000000">&nbsp;Singleton&nbsp;getInstance()</span><span id="Codehighlighter1_138_268_Open_Text"><span style="color: #000000">{</span><span style="color: #008000">//</span><span style="color: #008000">采用static修饰，说明该方法不需先创建实例而直接调用<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #008000"><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">这个方法是线程同步的</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #008000"><img id="Codehighlighter1_205_246_Open_Image" onclick="this.style.display='none'; Codehighlighter1_205_246_Open_Text.style.display='none'; Codehighlighter1_205_246_Closed_Image.style.display='inline'; Codehighlighter1_205_246_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_205_246_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_205_246_Closed_Text.style.display='none'; Codehighlighter1_205_246_Open_Image.style.display='inline'; Codehighlighter1_205_246_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(instance</span><span style="color: #000000">==</span><span style="color: #0000ff">null</span><span style="color: #000000">)</span><span id="Codehighlighter1_205_246_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;Singleton();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><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: #0000ff">return</span><span style="color: #000000">&nbsp;instance;<br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
一般认为第一种形式更加安全些。
 <img src ="http://www.blogjava.net/greatjone/aggbug/322509.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/greatjone/" target="_blank">jone</a> 2010-06-02 08:36 <a href="http://www.blogjava.net/greatjone/articles/322509.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>