﻿<?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-潘潘.eagle-文章分类-JAVA</title><link>http://www.blogjava.net/zhenxuanpan/category/48421.html</link><description /><language>zh-cn</language><lastBuildDate>Sat, 30 Apr 2011 03:33:54 GMT</lastBuildDate><pubDate>Sat, 30 Apr 2011 03:33:54 GMT</pubDate><ttl>60</ttl><item><title>《Effective java》学习笔记1</title><link>http://www.blogjava.net/zhenxuanpan/articles/349309.html</link><dc:creator>潘潘.eagle</dc:creator><author>潘潘.eagle</author><pubDate>Sat, 30 Apr 2011 01:58:00 GMT</pubDate><guid>http://www.blogjava.net/zhenxuanpan/articles/349309.html</guid><wfw:comment>http://www.blogjava.net/zhenxuanpan/comments/349309.html</wfw:comment><comments>http://www.blogjava.net/zhenxuanpan/articles/349309.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhenxuanpan/comments/commentRss/349309.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhenxuanpan/services/trackbacks/349309.html</trackback:ping><description><![CDATA[<!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:TrackMoves/>
<w:TrackFormatting/>
<w:PunctuationKerning/>
<w:DrawingGridVerticalSpacing>7.8 磅</w:DrawingGridVerticalSpacing>
<w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery>
<w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:DoNotPromoteQF/>
<w:LidThemeOther>EN-US</w:LidThemeOther>
<w:LidThemeAsian>ZH-CN</w:LidThemeAsian>
<w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
<w:Compatibility>
<w:SpaceForUL/>
<w:BalanceSingleByteDoubleByteWidth/>
<w:DoNotLeaveBackslashAlone/>
<w:ULTrailSpace/>
<w:DoNotExpandShiftReturn/>
<w:AdjustLineHeightInTable/>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
<w:SplitPgBreakAndParaMark/>
<w:DontVertAlignCellWithSp/>
<w:DontBreakConstrainedForcedTables/>
<w:DontVertAlignInTxbx/>
<w:Word11KerningPairs/>
<w:CachedColBalance/>
<w:UseFELayout/>
</w:Compatibility>
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
<m:mathPr>
<m:mathFont m:val="Cambria Math" />
<m:brkBin m:val="before" />
<m:brkBinSub m:val="&#45;-" />
<m:smallFrac m:val="off" />
<m:dispDef/>
<m:lMargin m:val="0" />
<m:rMargin m:val="0" />
<m:defJc m:val="centerGroup" />
<m:wrapIndent m:val="1440" />
<m:intLim m:val="subSup" />
<m:naryLim m:val="undOvr" />
</m:mathPr></w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles deflockedstate="false" defunhidewhenused="true" defsemihidden="true" defqformat="false" defpriority="99" latentstylecount="267">
<w:LsdException locked="false" priority="0" semihidden="false" unhidewhenused="false" qformat="true" name="Normal" />
<w:LsdException locked="false" priority="9" semihidden="false" unhidewhenused="false" qformat="true" name="heading 1" />
<w:LsdException locked="false" priority="9" qformat="true" name="heading 2" />
<w:LsdException locked="false" priority="9" qformat="true" name="heading 3" />
<w:LsdException locked="false" priority="9" qformat="true" name="heading 4" />
<w:LsdException locked="false" priority="9" qformat="true" name="heading 5" />
<w:LsdException locked="false" priority="9" qformat="true" name="heading 6" />
<w:LsdException locked="false" priority="9" qformat="true" name="heading 7" />
<w:LsdException locked="false" priority="9" qformat="true" name="heading 8" />
<w:LsdException locked="false" priority="9" qformat="true" name="heading 9" />
<w:LsdException locked="false" priority="39" name="toc 1" />
<w:LsdException locked="false" priority="39" name="toc 2" />
<w:LsdException locked="false" priority="39" name="toc 3" />
<w:LsdException locked="false" priority="39" name="toc 4" />
<w:LsdException locked="false" priority="39" name="toc 5" />
<w:LsdException locked="false" priority="39" name="toc 6" />
<w:LsdException locked="false" priority="39" name="toc 7" />
<w:LsdException locked="false" priority="39" name="toc 8" />
<w:LsdException locked="false" priority="39" name="toc 9" />
<w:LsdException locked="false" priority="35" qformat="true" name="caption" />
<w:LsdException locked="false" priority="10" semihidden="false" unhidewhenused="false" qformat="true" name="Title" />
<w:LsdException locked="false" priority="1" name="Default Paragraph Font" />
<w:LsdException locked="false" priority="11" semihidden="false" unhidewhenused="false" qformat="true" name="Subtitle" />
<w:LsdException locked="false" priority="22" semihidden="false" unhidewhenused="false" qformat="true" name="Strong" />
<w:LsdException locked="false" priority="20" semihidden="false" unhidewhenused="false" qformat="true" name="Emphasis" />
<w:LsdException locked="false" priority="59" semihidden="false" unhidewhenused="false" name="Table Grid" />
<w:LsdException locked="false" unhidewhenused="false" name="Placeholder Text" />
<w:LsdException locked="false" priority="1" semihidden="false" unhidewhenused="false" qformat="true" name="No Spacing" />
<w:LsdException locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading" />
<w:LsdException locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List" />
<w:LsdException locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid" />
<w:LsdException locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1" />
<w:LsdException locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2" />
<w:LsdException locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1" />
<w:LsdException locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2" />
<w:LsdException locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1" />
<w:LsdException locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2" />
<w:LsdException locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3" />
<w:LsdException locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List" />
<w:LsdException locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading" />
<w:LsdException locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List" />
<w:LsdException locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid" />
<w:LsdException locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 1" />
<w:LsdException locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 1" />
<w:LsdException locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 1" />
<w:LsdException locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 1" />
<w:LsdException locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 1" />
<w:LsdException locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 1" />
<w:LsdException locked="false" unhidewhenused="false" name="Revision" />
<w:LsdException locked="false" priority="34" semihidden="false" unhidewhenused="false" qformat="true" name="List Paragraph" />
<w:LsdException locked="false" priority="29" semihidden="false" unhidewhenused="false" qformat="true" name="Quote" />
<w:LsdException locked="false" priority="30" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Quote" />
<w:LsdException locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 1" />
<w:LsdException locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 1" />
<w:LsdException locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 1" />
<w:LsdException locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 1" />
<w:LsdException locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 1" />
<w:LsdException locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 1" />
<w:LsdException locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 1" />
<w:LsdException locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 1" />
<w:LsdException locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 2" />
<w:LsdException locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 2" />
<w:LsdException locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 2" />
<w:LsdException locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 2" />
<w:LsdException locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 2" />
<w:LsdException locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 2" />
<w:LsdException locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 2" />
<w:LsdException locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 2" />
<w:LsdException locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 2" />
<w:LsdException locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 2" />
<w:LsdException locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 2" />
<w:LsdException locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 2" />
<w:LsdException locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 2" />
<w:LsdException locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 2" />
<w:LsdException locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 3" />
<w:LsdException locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 3" />
<w:LsdException locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 3" />
<w:LsdException locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 3" />
<w:LsdException locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 3" />
<w:LsdException locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 3" />
<w:LsdException locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 3" />
<w:LsdException locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 3" />
<w:LsdException locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 3" />
<w:LsdException locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 3" />
<w:LsdException locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 3" />
<w:LsdException locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 3" />
<w:LsdException locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 3" />
<w:LsdException locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 3" />
<w:LsdException locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 4" />
<w:LsdException locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 4" />
<w:LsdException locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 4" />
<w:LsdException locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 4" />
<w:LsdException locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 4" />
<w:LsdException locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 4" />
<w:LsdException locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 4" />
<w:LsdException locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 4" />
<w:LsdException locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 4" />
<w:LsdException locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 4" />
<w:LsdException locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 4" />
<w:LsdException locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 4" />
<w:LsdException locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 4" />
<w:LsdException locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 4" />
<w:LsdException locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 5" />
<w:LsdException locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 5" />
<w:LsdException locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 5" />
<w:LsdException locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 5" />
<w:LsdException locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 5" />
<w:LsdException locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 5" />
<w:LsdException locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 5" />
<w:LsdException locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 5" />
<w:LsdException locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 5" />
<w:LsdException locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 5" />
<w:LsdException locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 5" />
<w:LsdException locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 5" />
<w:LsdException locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 5" />
<w:LsdException locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 5" />
<w:LsdException locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 6" />
<w:LsdException locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 6" />
<w:LsdException locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 6" />
<w:LsdException locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 6" />
<w:LsdException locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 6" />
<w:LsdException locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 6" />
<w:LsdException locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 6" />
<w:LsdException locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 6" />
<w:LsdException locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 6" />
<w:LsdException locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 6" />
<w:LsdException locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 6" />
<w:LsdException locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 6" />
<w:LsdException locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 6" />
<w:LsdException locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 6" />
<w:LsdException locked="false" priority="19" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Emphasis" />
<w:LsdException locked="false" priority="21" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Emphasis" />
<w:LsdException locked="false" priority="31" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Reference" />
<w:LsdException locked="false" priority="32" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Reference" />
<w:LsdException locked="false" priority="33" semihidden="false" unhidewhenused="false" qformat="true" name="Book Title" />
<w:LsdException locked="false" priority="37" name="Bibliography" />
<w:LsdException locked="false" priority="39" qformat="true" name="TOC Heading" />
</w:LatentStyles>
</xml><![endif]--><!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-qformat:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.5pt;
mso-bidi-font-size:11.0pt;
font-family:"Calibri","sans-serif";
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;
mso-font-kerning:1.0pt;}
</style>
<![endif]-->
<p class="MsoNormal" align="center"><span style="font-family: 宋体;">考虑用静态工厂方法代替构造器</span></p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: 0cm;"><span lang="EN-US">Tips:</span><span style="font-family: 宋体;">这里的静态工厂方法非设计模式的静态工厂方法</span></p>
<p class="MsoNormal"><span lang="EN-US">1</span><span style="font-family: 宋体;">、相对构造器的优势：</span></p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: 0cm;"><span lang="EN-US">1.1</span><span style="font-family: 宋体;">、静态工厂方法有名称：</span></p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: 0cm;"><span style="font-family: 宋体;">因为构造器只能有一个特定的签名，所以要提供多个构造器必须要通过参数列表的顺序上不同来实现，这样要求用户记住各种构造器，如果没有相关文档，容易出现错误。（</span><span lang="EN-US">eclipse</span><span style="font-family: 宋体;">中有自动检测功能，不过从语言的角度这样还是有问题的）而对于静态工厂方法，当一个类需要多个带有相同标签名得构造器时，就用静态工厂方法代替构造器，并慎重的选择名称以便突出它们之间的区别</span></p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: 0cm;"><span lang="EN-US">1.2</span><span style="font-family: 宋体;">、不用每次调用的时候都新建一个对象</span></p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: 0cm;"><span lang="EN-US">Java</span><span style="font-family: 宋体;">中创建对象的成本是非常大的，因此使用静态工厂方法的同时，可以预先构建好的实例，或者将构建好的实例缓存起来，进行重复利用，避免创建不必要的对象。</span></p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: 0cm;"><span lang="EN-US">Such as :Boolean.valueOf()</span><span style="font-family: 宋体;">，永远不创建对象</span></p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: 0cm;"><span lang="EN-US">Public static Boolean valueOf(Boolean b) {</span></p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: 0cm;"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Return b ?
Boolean.TRUE : Boolean.FALSE;</span></p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: 0cm;"><span lang="EN-US">}</span></p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: 0cm;"><span lang="EN-US">Ps:</span><span style="font-family: 宋体;">我们自己写程序的时候，可以通过</span><span lang="EN-US">enum</span><span style="font-family: 宋体;">来控制类在某个时刻那些实例存在。这些类被称为实例受控的类。</span></p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: 0cm;"><span lang="EN-US">1.3</span><span style="font-family: 宋体;">、可以返回返回原类型的任何子类型的对象</span></p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: 0cm;"><span lang="EN-US">1.3.1</span><span style="font-family: 宋体;">、这里将类得子类进行隐藏，通过</span><span lang="EN-US">API</span><span style="font-family: 宋体;">返回对象，同时又不会使对象的类变成共有。同时这也为针对接口编程提供了便利。因为接口不能有静态方法（静态方法属于类所拥有），则将接口</span><span lang="EN-US">Types</span><span style="font-family: 宋体;">中的静态工厂方法被放在一个名为</span><span lang="EN-US">Types</span><span style="font-family: 宋体;">的不可实例化的类中。</span></p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: 0cm;"><span lang="EN-US">API</span><span style="font-family: 宋体;">中实现就是</span><span lang="EN-US">Collecion</span><span style="font-family: 宋体;">和</span><span lang="EN-US">Collections</span><span style="font-family: 宋体;">。</span></p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: 0cm;"><span lang="EN-US">Collection</span><span style="font-family: 宋体;">是</span><span lang="EN-US">java</span><span style="font-family: 宋体;">中的集合类的接口，它提供了集合类所共有的方法</span></p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: 0cm;"><span lang="EN-US">Collections</span><span style="font-family: 宋体;">是由</span><span lang="EN-US">Collection</span><span style="font-family: 宋体;">上进行操作或返回</span><span lang="EN-US">Collection</span><span style="font-family: 宋体;">的静态方法组成。例如它提供了不可修改的集合，同步集合等。通过这种方式比导出</span><span lang="EN-US">32</span><span style="font-family: 宋体;">个独立公有类得实现方式要小得多。</span></p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: 0cm;"><span lang="EN-US">1.3.2</span><span style="font-family: 宋体;">、公有的静态工厂方法所返回的对象的类不仅可以是非公有的，而且该类还可以随着每次调用而发生变化，这取决于静态工厂方法的参数值。</span></p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: 0cm;"><span lang="EN-US">API</span><span style="font-family: 宋体;">中实现是</span><span lang="EN-US"> EnumSet</span><span style="font-family: 宋体;">类</span></p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: 0cm;"><span style="font-family: 宋体;">书中说：如果它的元素有</span><span lang="EN-US">64</span><span style="font-family: 宋体;">个或者更少，静态工厂方法就返回了一个</span><span lang="EN-US">RegalarEnumSet</span><span style="font-family: 宋体;">实例，用单个</span><span lang="EN-US">long</span><span style="font-family: 宋体;">支持；如果枚举类型有</span><span lang="EN-US">65</span><span style="font-family: 宋体;">个或者更多的元素，工厂就返回</span><span lang="EN-US">JumboEnumSet</span><span style="font-family: 宋体;">类型，用</span><span lang="EN-US">long</span><span style="font-family: 宋体;">数组进行支持。</span></p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: 0cm;"><span lang="EN-US">Ps:</span><span style="font-family: 宋体;">查阅了下</span><span lang="EN-US">jdk api</span><span style="font-family: 宋体;">没有找到相关的内容。不过理解上没什么难度，根据传入参数的量。底层动态选择实现的方式而已。</span></p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: 0cm;"><span lang="EN-US">1.3.3</span><span style="font-family: 宋体;">、静态工厂方法返回的对象所属的累，在编写该静态工厂方法的类时可以不必存在。</span></p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: 0cm;"><span style="font-family: 宋体;">服务者框架：多个服务提供者实现了一个服务，系统为服务提供者的客户端提供多个实现，并把他们从多个实现中解耦出来。</span></p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: 0cm;"><span style="font-family: 宋体;">服务提供者框架三个重要的组件：</span></p>
<p class="MsoListParagraph" style="margin-left: 39pt; text-indent: 3pt;"><span style="font-family: 宋体;">服务接口（</span><span lang="EN-US">Service Interface</span><span style="font-family: 宋体;">）：提供者实现的</span><span lang="EN-US">;</span></p>
<p class="MsoListParagraph" style="margin-left: 42pt; text-indent: 0cm;"><span style="font-family: 宋体;">提供者注册的</span><span lang="EN-US">API(provider Registration API)</span><span style="font-family: 宋体;">，系统用来注册实现的，让客户端返回它们的</span></p>
<p class="MsoListParagraph" style="margin-left: 39pt; text-indent: 3pt;"><span style="font-family: 宋体;">服务访问</span><span lang="EN-US">API(Service Registration API),</span><span style="font-family: 宋体;">客户端用来获取服务的实例的。</span></p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: 0cm;"><span lang="EN-US">API</span><span style="font-family: 宋体;">中实现是</span><span lang="EN-US">JDBC</span><span style="font-family: 宋体;">的服务</span></p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: 0cm;"><span style="font-family: 宋体;">每个</span><span lang="EN-US">db</span><span style="font-family: 宋体;">提供自己的</span><span lang="EN-US">*.Jar</span><span style="font-family: 宋体;">包来实现</span><span lang="EN-US">DB</span><span style="font-family: 宋体;">的操作即</span><span lang="EN-US">Driver</span><span style="font-family: 宋体;">，它们遵从一套标准。这就是服务接口</span></p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: 0cm;"><span lang="EN-US">JDK</span><span style="font-family: 宋体;">中提供的</span><span lang="EN-US">DriverManagere.registerDriver</span><span style="font-family: 宋体;">是提供者注册的</span><span lang="EN-US">API,</span></p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: 0cm;"><span lang="EN-US">DriverManager.getConnection()</span><span style="font-family: 宋体;">是服务访问</span><span lang="EN-US">API.</span></p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: 0cm;"><span lang="EN-US">Ps:</span><span style="font-family: 宋体;">如果对这一部分不是很理解的话，强烈推荐原书中</span><span lang="EN-US">P7</span><span style="font-family: 宋体;">的</span><span lang="EN-US">code&#8230;</span><span style="font-family: 宋体;">一看就明白了</span></p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: 0cm;"><span lang="EN-US">1.4</span><span style="font-family: 宋体;">、在创建参数化类型实例的时候，它们使代码变得更加简洁</span></p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: 0cm;"><span style="font-family: 宋体;">这里面主要提到的是类型推导</span><span lang="EN-US">(type reference)</span><span style="font-family: 宋体;">。所谓类型推导，即根据你定义的返回对象的类型来推导实例化的类型</span><span lang="EN-US">(</span><span style="font-family: 宋体;">个人感觉虽然很方便，有点不靠谱啊</span><span lang="EN-US">)</span></p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: 0cm;"><span style="font-family: 宋体;">书中给的代码实例如下：</span></p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: 0cm;"><span lang="EN-US">Public static &lt;K,V&gt; HashMap&lt;K, V&gt; newInstance()
{</span></p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: 0cm;"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return new
HashMap&lt;K, V&gt;();</span></p>
<p class="MsoListParagraph" style="margin-left: 18pt; text-indent: 0cm;"><span lang="EN-US">}</span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;
</span>Map&lt;Strinng, List&lt;String&gt;&gt; m = HashMap.newInstance();</span></p>
<p class="MsoNormal"><span lang="EN-US">2</span><span style="font-family: 宋体;">、静态工厂的缺点</span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;
</span>2.1</span><span style="font-family: 宋体;">、类如果不含公有的或者受保护的构造器，就不能被子类化。</span></p>
<p class="MsoNormal" style="margin-left: 42pt; text-indent: -42pt;"><span lang="EN-US"><span>&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp;</span><span>&nbsp;</span></span><span style="font-family: 宋体;">这里的主要原因就是，子类的方法的范围权限比父类更严格。书中也提到了，这其实是个优点。因为组合比继承更应该用。</span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp; </span>2.2</span><span style="font-family: 宋体;">、和其他静态方法实际上没有任何区别。</span></p>
<p class="MsoNormal"><span lang="EN-US"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span></span><span style="font-family: 宋体;">这个纯粹是从</span><span lang="EN-US">java doc</span><span style="font-family: 宋体;">方便查询的角度来说的</span><span lang="EN-US">,so I don&#8217;t care it</span></p>
<img src ="http://www.blogjava.net/zhenxuanpan/aggbug/349309.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhenxuanpan/" target="_blank">潘潘.eagle</a> 2011-04-30 09:58 <a href="http://www.blogjava.net/zhenxuanpan/articles/349309.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>