单件模式(Singleton Pattern)

概述

Singleton模式要求一个类有且仅有一个实例,并且提供了一个全局的访问点。那么绕过常规的构造器(new),提供一种机制来保证一个类只有一个实例就是单件模式了。客户程序员在调用这个类时,是不会考虑这个类是否只能有一个实例等问题的,所以,这应该是类设计者的责任,而不是类使用者的责任。

意图

保证一个类仅有一个实例,并提供一个访问它的全局访问点。

模型图

逻辑模型图:

<shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></shapetype><shape id="_x0000_i1112" style="WIDTH: 327pt; HEIGHT: 80.25pt" alt="" type="#_x0000_t75"><imagedata o:href="http://terrylee.cnblogs.com/images/cnblogs_com/terrylee/PIC025.jpg" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image001.jpg"></imagedata></shape>

物理模型图:

<shape id="_x0000_i1113" style="WIDTH: 299.25pt; HEIGHT: 110.25pt" alt="" type="#_x0000_t75"><imagedata o:href="http://terrylee.cnblogs.com/images/cnblogs_com/terrylee/PIC030.JPG" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image002.jpg"></imagedata></shape>

生活中的例子

微软的CEOSingleton微软只有一个CEO,所以无论他的身份为何,他都有一个全局的访问点---微软的CEO”。

五种实现

1.简单实现

publicsealedclassSingleton
<shape id="_x0000_i1114" style="WIDTH: 11.25pt; HEIGHT: 15pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/dot.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image003.gif"></imagedata></shape>{
staticSingletoninstance=null;
Singleton()
<shape id="_x0000_i1115" style="WIDTH: 11.25pt; HEIGHT: 15pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/dot.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image003.gif"></imagedata></shape>{
}
publicstaticSingletonInstance
<shape id="_x0000_i1116" style="WIDTH: 11.25pt; HEIGHT: 15pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/dot.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image003.gif"></imagedata></shape>{
get
<shape id="_x0000_i1117" style="WIDTH: 11.25pt; HEIGHT: 15pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/dot.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image003.gif"></imagedata></shape>{
if(instance==null)
<shape id="_x0000_i1118" style="WIDTH: 11.25pt; HEIGHT: 15pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/dot.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image003.gif"></imagedata></shape>{
instance=newSingleton();
}
returninstance;
}
}
}

这种方式的实现的“CEO”并不是线程安全的,也就是在多线程的情况下他是有可能产生两个“CEO”的。如代码所写,如果同时有两个线程去判断(instance == null),并且得到的结果为真,这时两个线程都会创建类Singleton的实例,这样就违背了Singleton模式的原则。

2.安全的线程

publicsealedclassSingleton
<shape id="_x0000_i1119" style="WIDTH: 11.25pt; HEIGHT: 15pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/dot.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image003.gif"></imagedata></shape>{
staticSingletoninstance=null;
staticreadonlyobjectpadlock=newobject();

Singleton()
<shape id="_x0000_i1120" style="WIDTH: 11.25pt; HEIGHT: 15pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/dot.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image003.gif"></imagedata></shape>{
}

publicstaticSingletonInstance
<shape id="_x0000_i1121" style="WIDTH: 11.25pt; HEIGHT: 15pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/dot.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image003.gif"></imagedata></shape>{
get
<shape id="_x0000_i1122" style="WIDTH: 11.25pt; HEIGHT: 15pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/dot.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image003.gif"></imagedata></shape>{
lock(padlock)
<shape id="_x0000_i1123" style="WIDTH: 11.25pt; HEIGHT: 15pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/dot.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image003.gif"></imagedata></shape>{
if(instance==null)
<shape id="_x0000_i1124" style="WIDTH: 11.25pt; HEIGHT: 15pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/dot.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image003.gif"></imagedata></shape>{
instance=
newSingleton();
}
returninstance;
}
}
}
}


这种方式的实现对于线程来说是安全的。我们首先创建了一个进程辅助对象,线程在进入时先对辅助对象加锁然后再检测对象是否被创建,这样可以确保只有一个实例被创建,因为在同一个时刻加了锁的那部分程序只有一个线程可以进入。这种情况下,对象实例由最先进入的那个线程创建,后来的线程在进入时(instence == null)为假,不会再去创建对象实例了。但是这种实现方式增加了额外的开销,损失了性能。

3.双重锁定

1<shape id="_x0000_i1025" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/None.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image004.gif"></imagedata></shape>publicsealedclassSingleton
2<shape id="Codehighlighter1_30_522_Open_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1026"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image005.gif"></imagedata></shape><shape id="Codehighlighter1_30_522_Closed_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1027"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image006.gif"></imagedata></shape><shape id="_x0000_i1125" style="WIDTH: 11.25pt; HEIGHT: 15pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/dot.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image003.gif"></imagedata></shape>{
3<shape id="_x0000_i1028" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/InBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image007.gif"></imagedata></shape>staticSingletoninstance=null;
4<shape id="_x0000_i1029" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/InBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image007.gif"></imagedata></shape>staticreadonlyobjectpadlock=newobject();
5<shape id="_x0000_i1030" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/InBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image007.gif"></imagedata></shape>
6<shape id="_x0000_i1031" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/InBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image007.gif"></imagedata></shape>Singleton()
7<shape id="Codehighlighter1_140_146_Open_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1032"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image008.gif"></imagedata></shape><shape id="Codehighlighter1_140_146_Closed_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1033"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image009.gif"></imagedata></shape><shape id="_x0000_i1126" style="WIDTH: 11.25pt; HEIGHT: 15pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/dot.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image003.gif"></imagedata></shape>{
8<shape id="_x0000_i1034" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image010.gif"></imagedata></shape>}
9<shape id="_x0000_i1035" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/InBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image007.gif"></imagedata></shape>
10<shape id="_x0000_i1036" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/InBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image007.gif"></imagedata></shape>publicstaticSingletonInstance
11<shape id="Codehighlighter1_190_520_Open_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1037"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image008.gif"></imagedata></shape><shape id="Codehighlighter1_190_520_Closed_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1038"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image009.gif"></imagedata></shape><shape id="_x0000_i1127" style="WIDTH: 11.25pt; HEIGHT: 15pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/dot.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image003.gif"></imagedata></shape>{
12<shape id="_x0000_i1039" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/InBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image007.gif"></imagedata></shape>get
13<shape id="Codehighlighter1_212_514_Open_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1040"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image008.gif"></imagedata></shape><shape id="Codehighlighter1_212_514_Closed_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1041"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image009.gif"></imagedata></shape><shape id="_x0000_i1128" style="WIDTH: 11.25pt; HEIGHT: 15pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/dot.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image003.gif"></imagedata></shape>{
14<shape id="_x0000_i1042" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/InBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image007.gif"></imagedata></shape>if(instance==null)
15<shape id="Codehighlighter1_258_475_Open_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1043"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image008.gif"></imagedata></shape><shape id="Codehighlighter1_258_475_Closed_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1044"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image009.gif"></imagedata></shape><shape id="_x0000_i1129" style="WIDTH: 11.25pt; HEIGHT: 15pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/dot.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image003.gif"></imagedata></shape>{
16<shape id="_x0000_i1045" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/InBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image007.gif"></imagedata></shape>lock(padlock)
17<shape id="Codehighlighter1_307_461_Open_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1046"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image008.gif"></imagedata></shape><shape id="Codehighlighter1_307_461_Closed_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1047"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image009.gif"></imagedata></shape><shape id="_x0000_i1130" style="WIDTH: 11.25pt; HEIGHT: 15pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/dot.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image003.gif"></imagedata></shape>{
18<shape id="_x0000_i1048" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/InBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image007.gif"></imagedata></shape>if(instance==null)
19<shape id="Codehighlighter1_369_443_Open_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1049"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image008.gif"></imagedata></shape><shape id="Codehighlighter1_369_443_Closed_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1050"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image009.gif"></imagedata></shape><shape id="_x0000_i1131" style="WIDTH: 11.25pt; HEIGHT: 15pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/dot.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image003.gif"></imagedata></shape>{
20<shape id="_x0000_i1051" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/InBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image007.gif"></imagedata></shape>instance=newSingleton();
21<shape id="_x0000_i1052" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image010.gif"></imagedata></shape>}
22<shape id="_x0000_i1053" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image010.gif"></imagedata></shape>}
23<shape id="_x0000_i1054" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image010.gif"></imagedata></shape>}
24<shape id="_x0000_i1055" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/InBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image007.gif"></imagedata></shape>returninstance;
25<shape id="_x0000_i1056" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image010.gif"></imagedata></shape>}
26<shape id="_x0000_i1057" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image010.gif"></imagedata></shape>}
27<shape id="_x0000_i1058" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image011.gif"></imagedata></shape>}
28<shape id="_x0000_i1059" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/None.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image004.gif"></imagedata></shape>

这种实现方式对多线程来说是安全的,同时线程不是每次都加锁,只有判断对象实例没有被创建时它才加锁,有了我们上面第一部分的里面的分析,我们知道,加锁后还得再进行对象是否已被创建的判断。它解决了线程并发问题,同时避免在每个 Instance 属性方法的调用中都出现独占锁定。它还允许您将实例化延迟到第一次访问对象时发生。实际上,应用程序很少需要这种类型的实现。大多数情况下我们会用静态初始化。这种方式仍然有很多缺点:无法实现延迟初始化。

4.静态初始化

1<shape id="_x0000_i1132" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/None.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image004.gif"></imagedata></shape>publicsealedclassSingleton
2<shape id="Codehighlighter1_30_264_Open_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1133"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image005.gif"></imagedata></shape><shape id="Codehighlighter1_30_264_Closed_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1134"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image006.gif"></imagedata></shape><shape id="_x0000_i1135" style="WIDTH: 11.25pt; HEIGHT: 15pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/dot.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image003.gif"></imagedata></shape>{
3<shape id="_x0000_i1136" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/InBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image007.gif"></imagedata></shape>staticreadonlySingletoninstance=newSingleton();
4<shape id="_x0000_i1060" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/InBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image007.gif"></imagedata></shape>
5<shape id="_x0000_i1061" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/InBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image007.gif"></imagedata></shape>staticSingleton()
6<shape id="Codehighlighter1_116_122_Open_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1062"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image008.gif"></imagedata></shape><shape id="Codehighlighter1_116_122_Closed_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1063"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image009.gif"></imagedata></shape><shape id="_x0000_i1137" style="WIDTH: 11.25pt; HEIGHT: 15pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/dot.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image003.gif"></imagedata></shape>{
7<shape id="_x0000_i1064" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image010.gif"></imagedata></shape>}
8<shape id="_x0000_i1065" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/InBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image007.gif"></imagedata></shape>
9<shape id="_x0000_i1066" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/InBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image007.gif"></imagedata></shape>Singleton()
10<shape id="Codehighlighter1_145_151_Open_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1067"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image008.gif"></imagedata></shape><shape id="Codehighlighter1_145_151_Closed_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1068"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image009.gif"></imagedata></shape><shape id="_x0000_i1138" style="WIDTH: 11.25pt; HEIGHT: 15pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/dot.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image003.gif"></imagedata></shape>{
11<shape id="_x0000_i1069" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image010.gif"></imagedata></shape>}
12<shape id="_x0000_i1070" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/InBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image007.gif"></imagedata></shape>
13<shape id="_x0000_i1071" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/InBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image007.gif"></imagedata></shape>publicstaticSingletonInstance
14<shape id="Codehighlighter1_195_262_Open_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1072"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image008.gif"></imagedata></shape><shape id="Codehighlighter1_195_262_Closed_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1073"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image009.gif"></imagedata></shape><shape id="_x0000_i1139" style="WIDTH: 11.25pt; HEIGHT: 15pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/dot.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image003.gif"></imagedata></shape>{
15<shape id="_x0000_i1074" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/InBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image007.gif"></imagedata></shape>get
16<shape id="Codehighlighter1_217_256_Open_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1075"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image008.gif"></imagedata></shape><shape id="Codehighlighter1_217_256_Closed_Image" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75" o:spid="_x0000_i1076"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image009.gif"></imagedata></shape><shape id="_x0000_i1140" style="WIDTH: 11.25pt; HEIGHT: 15pt" alt="" type="#_x0000_t75"><imagedata o:href="http://www.cnblogs.com/Images/dot.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image003.gif"></imagedata></shape>{
17<shape id="_x0000_i1077" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/InBlock.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image007.gif"></imagedata></shape>returninstance;
18<shape id="_x0000_i1078" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" src="file:///C:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msoclip1/01/clip_image010.gif"></imagedata></shape>}
19<shape id="_x0000_i1079" style="WIDTH: 8.25pt; HEIGHT: 12pt" alt="" type="#_x0000_t75"><imagedata o:href="http://terrylee.cnblogs.com/Images/OutliningIndicators

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值