﻿<?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-小草的天空-文章分类-设计模式</title><link>http://www.blogjava.net/xiaofei-suman/category/44271.html</link><description /><language>zh-cn</language><lastBuildDate>Sat, 13 Mar 2010 09:19:29 GMT</lastBuildDate><pubDate>Sat, 13 Mar 2010 09:19:29 GMT</pubDate><ttl>60</ttl><item><title>《java与模式》(阎宏) 学习笔记5(单例模式)</title><link>http://www.blogjava.net/xiaofei-suman/articles/247999.html</link><dc:creator>齐纳尔多</dc:creator><author>齐纳尔多</author><pubDate>Wed, 24 Dec 2008 00:54:00 GMT</pubDate><guid>http://www.blogjava.net/xiaofei-suman/articles/247999.html</guid><wfw:comment>http://www.blogjava.net/xiaofei-suman/comments/247999.html</wfw:comment><comments>http://www.blogjava.net/xiaofei-suman/articles/247999.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaofei-suman/comments/commentRss/247999.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaofei-suman/services/trackbacks/247999.html</trackback:ping><description><![CDATA[<p>一、 单例模式（Singleton)<br />
</p>
  <img src ="http://www.blogjava.net/xiaofei-suman/aggbug/247999.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaofei-suman/" target="_blank">齐纳尔多</a> 2008-12-24 08:54 <a href="http://www.blogjava.net/xiaofei-suman/articles/247999.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《java与模式》(阎宏) 学习笔记4(抽象工厂模式) </title><link>http://www.blogjava.net/xiaofei-suman/articles/247908.html</link><dc:creator>齐纳尔多</dc:creator><author>齐纳尔多</author><pubDate>Tue, 23 Dec 2008 06:23:00 GMT</pubDate><guid>http://www.blogjava.net/xiaofei-suman/articles/247908.html</guid><wfw:comment>http://www.blogjava.net/xiaofei-suman/comments/247908.html</wfw:comment><comments>http://www.blogjava.net/xiaofei-suman/articles/247908.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaofei-suman/comments/commentRss/247908.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaofei-suman/services/trackbacks/247908.html</trackback:ping><description><![CDATA[一、抽象工厂模式和工厂方法模式的区别是：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;工厂方法模式是一个工厂具体类对应一个产品的等级结构，而Abstract Factory 是一个工厂的具体类相应多个产品的等级结构<br />
二、UML图<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img height="203" alt="" src="http://www.blogjava.net/images/blogjava_net/xiaofei-suman/AbstractFactory.jpg" width="520" border="0" /> <br />
三：简单测试代码如下：<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_0_17_Open_Image" onclick="this.style.display='none'; Codehighlighter1_0_17_Open_Text.style.display='none'; Codehighlighter1_0_17_Closed_Image.style.display='inline'; Codehighlighter1_0_17_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_0_17_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_0_17_Closed_Text.style.display='none'; Codehighlighter1_0_17_Open_Image.style.display='inline'; Codehighlighter1_0_17_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span id="Codehighlighter1_0_17_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">/**&nbsp;*/</span><span id="Codehighlighter1_0_17_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;*&nbsp;抽象的工厂接口<br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img id="Codehighlighter1_45_159_Open_Image" onclick="this.style.display='none'; Codehighlighter1_45_159_Open_Text.style.display='none'; Codehighlighter1_45_159_Closed_Image.style.display='inline'; Codehighlighter1_45_159_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_45_159_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_45_159_Closed_Text.style.display='none'; Codehighlighter1_45_159_Open_Image.style.display='inline'; Codehighlighter1_45_159_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">interface</span><span style="color: #000000">&nbsp;IFactory&nbsp;</span><span id="Codehighlighter1_45_159_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_45_159_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img id="Codehighlighter1_48_70_Open_Image" onclick="this.style.display='none'; Codehighlighter1_48_70_Open_Text.style.display='none'; Codehighlighter1_48_70_Closed_Image.style.display='inline'; Codehighlighter1_48_70_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_48_70_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_48_70_Closed_Text.style.display='none'; Codehighlighter1_48_70_Open_Image.style.display='inline'; Codehighlighter1_48_70_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_48_70_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">/**&nbsp;*/</span><span id="Codehighlighter1_48_70_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;等级结构A的工厂方法<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</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;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;IProductA&nbsp;factoryA();<br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img id="Codehighlighter1_105_127_Open_Image" onclick="this.style.display='none'; Codehighlighter1_105_127_Open_Text.style.display='none'; Codehighlighter1_105_127_Closed_Image.style.display='inline'; Codehighlighter1_105_127_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_105_127_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_105_127_Closed_Text.style.display='none'; Codehighlighter1_105_127_Open_Image.style.display='inline'; Codehighlighter1_105_127_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_105_127_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">/**&nbsp;*/</span><span id="Codehighlighter1_105_127_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
</span><span style="color: #008080">11</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;等级结构B的工厂方法<br />
</span><span style="color: #008080">12</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">13</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">public</span><span style="color: #000000">&nbsp;IProductB&nbsp;factoryB();<br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img id="Codehighlighter1_203_326_Open_Image" onclick="this.style.display='none'; Codehighlighter1_203_326_Open_Text.style.display='none'; Codehighlighter1_203_326_Closed_Image.style.display='inline'; Codehighlighter1_203_326_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_203_326_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_203_326_Closed_Text.style.display='none'; Codehighlighter1_203_326_Open_Image.style.display='inline'; Codehighlighter1_203_326_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;FactoryA&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;IFactory&nbsp;</span><span id="Codehighlighter1_203_326_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_203_326_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">16</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">17</span><span style="color: #000000"><img id="Codehighlighter1_235_263_Open_Image" onclick="this.style.display='none'; Codehighlighter1_235_263_Open_Text.style.display='none'; Codehighlighter1_235_263_Closed_Image.style.display='inline'; Codehighlighter1_235_263_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_235_263_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_235_263_Closed_Text.style.display='none'; Codehighlighter1_235_263_Open_Image.style.display='inline'; Codehighlighter1_235_263_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;IProductA&nbsp;factoryA()&nbsp;</span><span id="Codehighlighter1_235_263_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_235_263_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">18</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;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ProductA();<br />
</span><span style="color: #008080">19</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">20</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">21</span><span style="color: #000000"><img id="Codehighlighter1_295_323_Open_Image" onclick="this.style.display='none'; Codehighlighter1_295_323_Open_Text.style.display='none'; Codehighlighter1_295_323_Closed_Image.style.display='inline'; Codehighlighter1_295_323_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_295_323_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_295_323_Closed_Text.style.display='none'; Codehighlighter1_295_323_Open_Image.style.display='inline'; Codehighlighter1_295_323_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;IProductB&nbsp;factoryB()&nbsp;</span><span id="Codehighlighter1_295_323_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_295_323_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">22</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;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ProductB();<br />
</span><span style="color: #008080">23</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">24</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">25</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">26</span><span style="color: #000000"><img id="Codehighlighter1_370_493_Open_Image" onclick="this.style.display='none'; Codehighlighter1_370_493_Open_Text.style.display='none'; Codehighlighter1_370_493_Closed_Image.style.display='inline'; Codehighlighter1_370_493_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_370_493_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_370_493_Closed_Text.style.display='none'; Codehighlighter1_370_493_Open_Image.style.display='inline'; Codehighlighter1_370_493_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;FactoryB&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;IFactory&nbsp;</span><span id="Codehighlighter1_370_493_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_370_493_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">27</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">28</span><span style="color: #000000"><img id="Codehighlighter1_402_430_Open_Image" onclick="this.style.display='none'; Codehighlighter1_402_430_Open_Text.style.display='none'; Codehighlighter1_402_430_Closed_Image.style.display='inline'; Codehighlighter1_402_430_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_402_430_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_402_430_Closed_Text.style.display='none'; Codehighlighter1_402_430_Open_Image.style.display='inline'; Codehighlighter1_402_430_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;IProductA&nbsp;factoryA()&nbsp;</span><span id="Codehighlighter1_402_430_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_402_430_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">29</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;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ProductA();<br />
</span><span style="color: #008080">30</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">31</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">32</span><span style="color: #000000"><img id="Codehighlighter1_462_490_Open_Image" onclick="this.style.display='none'; Codehighlighter1_462_490_Open_Text.style.display='none'; Codehighlighter1_462_490_Closed_Image.style.display='inline'; Codehighlighter1_462_490_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_462_490_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_462_490_Closed_Text.style.display='none'; Codehighlighter1_462_490_Open_Image.style.display='inline'; Codehighlighter1_462_490_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;IProductB&nbsp;factoryB()&nbsp;</span><span id="Codehighlighter1_462_490_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_462_490_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">33</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;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ProductB();<br />
</span><span style="color: #008080">34</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">35</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">36</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">37</span><span style="color: #000000"><img id="Codehighlighter1_495_510_Open_Image" onclick="this.style.display='none'; Codehighlighter1_495_510_Open_Text.style.display='none'; Codehighlighter1_495_510_Closed_Image.style.display='inline'; Codehighlighter1_495_510_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_495_510_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_495_510_Closed_Text.style.display='none'; Codehighlighter1_495_510_Open_Image.style.display='inline'; Codehighlighter1_495_510_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_495_510_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">/**&nbsp;*/</span><span id="Codehighlighter1_495_510_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
</span><span style="color: #008080">38</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;*&nbsp;产品的接口<br />
</span><span style="color: #008080">39</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">40</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">41</span><span style="color: #000000"><img id="Codehighlighter1_540_558_Open_Image" onclick="this.style.display='none'; Codehighlighter1_540_558_Open_Text.style.display='none'; Codehighlighter1_540_558_Closed_Image.style.display='inline'; Codehighlighter1_540_558_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_540_558_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_540_558_Closed_Text.style.display='none'; Codehighlighter1_540_558_Open_Image.style.display='inline'; Codehighlighter1_540_558_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">interface</span><span style="color: #000000">&nbsp;IProductA&nbsp;</span><span id="Codehighlighter1_540_558_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_540_558_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">42</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">void</span><span style="color: #000000">&nbsp;helloA();<br />
</span><span style="color: #008080">43</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">44</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">45</span><span style="color: #000000"><img id="Codehighlighter1_603_668_Open_Image" onclick="this.style.display='none'; Codehighlighter1_603_668_Open_Text.style.display='none'; Codehighlighter1_603_668_Closed_Image.style.display='inline'; Codehighlighter1_603_668_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_603_668_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_603_668_Closed_Text.style.display='none'; Codehighlighter1_603_668_Open_Image.style.display='inline'; Codehighlighter1_603_668_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;ProductA&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;IProductA</span><span id="Codehighlighter1_603_668_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_603_668_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">46</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">47</span><span style="color: #000000"><img id="Codehighlighter1_628_665_Open_Image" onclick="this.style.display='none'; Codehighlighter1_628_665_Open_Text.style.display='none'; Codehighlighter1_628_665_Closed_Image.style.display='inline'; Codehighlighter1_628_665_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_628_665_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_628_665_Closed_Text.style.display='none'; Codehighlighter1_628_665_Open_Image.style.display='inline'; Codehighlighter1_628_665_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">void</span><span style="color: #000000">&nbsp;helloA()&nbsp;</span><span id="Codehighlighter1_628_665_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_628_665_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">48</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;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">ProductA</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">49</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">50</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">51</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">52</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">53</span><span style="color: #000000"><img id="Codehighlighter1_698_716_Open_Image" onclick="this.style.display='none'; Codehighlighter1_698_716_Open_Text.style.display='none'; Codehighlighter1_698_716_Closed_Image.style.display='inline'; Codehighlighter1_698_716_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_698_716_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_698_716_Closed_Text.style.display='none'; Codehighlighter1_698_716_Open_Image.style.display='inline'; Codehighlighter1_698_716_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">interface</span><span style="color: #000000">&nbsp;IProductB&nbsp;</span><span id="Codehighlighter1_698_716_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_698_716_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">54</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">void</span><span style="color: #000000">&nbsp;helloB();<br />
</span><span style="color: #008080">55</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">56</span><span style="color: #000000"><img id="Codehighlighter1_760_825_Open_Image" onclick="this.style.display='none'; Codehighlighter1_760_825_Open_Text.style.display='none'; Codehighlighter1_760_825_Closed_Image.style.display='inline'; Codehighlighter1_760_825_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_760_825_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_760_825_Closed_Text.style.display='none'; Codehighlighter1_760_825_Open_Image.style.display='inline'; Codehighlighter1_760_825_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;ProductB&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;IProductB</span><span id="Codehighlighter1_760_825_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_760_825_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">57</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">58</span><span style="color: #000000"><img id="Codehighlighter1_785_823_Open_Image" onclick="this.style.display='none'; Codehighlighter1_785_823_Open_Text.style.display='none'; Codehighlighter1_785_823_Closed_Image.style.display='inline'; Codehighlighter1_785_823_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_785_823_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_785_823_Closed_Text.style.display='none'; Codehighlighter1_785_823_Open_Image.style.display='inline'; Codehighlighter1_785_823_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">void</span><span style="color: #000000">&nbsp;helloB()&nbsp;</span><span id="Codehighlighter1_785_823_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_785_823_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">59</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;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Product&nbsp;B</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">60</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">61</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">62</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">63</span><span style="color: #000000"><img id="Codehighlighter1_861_1118_Open_Image" onclick="this.style.display='none'; Codehighlighter1_861_1118_Open_Text.style.display='none'; Codehighlighter1_861_1118_Closed_Image.style.display='inline'; Codehighlighter1_861_1118_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_861_1118_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_861_1118_Closed_Text.style.display='none'; Codehighlighter1_861_1118_Open_Image.style.display='inline'; Codehighlighter1_861_1118_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;TestAbstractFactory&nbsp;</span><span id="Codehighlighter1_861_1118_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_861_1118_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">64</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">65</span><span style="color: #000000"><img id="Codehighlighter1_866_902_Open_Image" onclick="this.style.display='none'; Codehighlighter1_866_902_Open_Text.style.display='none'; Codehighlighter1_866_902_Closed_Image.style.display='inline'; Codehighlighter1_866_902_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_866_902_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_866_902_Closed_Text.style.display='none'; Codehighlighter1_866_902_Open_Image.style.display='inline'; Codehighlighter1_866_902_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_866_902_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">/**&nbsp;*/</span><span id="Codehighlighter1_866_902_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
</span><span style="color: #008080">66</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;测试抽象工厂模式<br />
</span><span style="color: #008080">67</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;args<br />
</span><span style="color: #008080">68</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">69</span><span style="color: #000000"><img id="Codehighlighter1_944_1115_Open_Image" onclick="this.style.display='none'; Codehighlighter1_944_1115_Open_Text.style.display='none'; Codehighlighter1_944_1115_Closed_Image.style.display='inline'; Codehighlighter1_944_1115_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_944_1115_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_944_1115_Closed_Text.style.display='none'; Codehighlighter1_944_1115_Open_Image.style.display='inline'; Codehighlighter1_944_1115_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;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span id="Codehighlighter1_944_1115_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_944_1115_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">70</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;IFactory&nbsp;f&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;FactoryA();<br />
</span><span style="color: #008080">71</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;f.factoryA().helloA();<br />
</span><span style="color: #008080">72</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;f.factoryB().helloB();<br />
</span><span style="color: #008080">73</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;<br />
</span><span style="color: #008080">74</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;IFactory&nbsp;f1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;FactoryB();<br />
</span><span style="color: #008080">75</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;f1.factoryA().helloA();<br />
</span><span style="color: #008080">76</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;f1.factoryB().helloB();<br />
</span><span style="color: #008080">77</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">78</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">79</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">80</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">81</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">82</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
  <img src ="http://www.blogjava.net/xiaofei-suman/aggbug/247908.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaofei-suman/" target="_blank">齐纳尔多</a> 2008-12-23 14:23 <a href="http://www.blogjava.net/xiaofei-suman/articles/247908.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《java与模式》(阎宏) 学习笔记III(工厂方法模式) </title><link>http://www.blogjava.net/xiaofei-suman/articles/246784.html</link><dc:creator>齐纳尔多</dc:creator><author>齐纳尔多</author><pubDate>Wed, 17 Dec 2008 01:55:00 GMT</pubDate><guid>http://www.blogjava.net/xiaofei-suman/articles/246784.html</guid><wfw:comment>http://www.blogjava.net/xiaofei-suman/comments/246784.html</wfw:comment><comments>http://www.blogjava.net/xiaofei-suman/articles/246784.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaofei-suman/comments/commentRss/246784.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaofei-suman/services/trackbacks/246784.html</trackback:ping><description><![CDATA[一、工厂方法模式（Factory Method）--&gt;&nbsp;多态性工厂（Polymorphic Factory）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.定义：就是定义一个创建产品对象的工厂接口，将实际创建工作推迟到子类&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.UML图<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img height="173" alt="" src="http://www.blogjava.net/images/blogjava_net/xiaofei-suman/FactoryMethod.gif" width="361" border="0" />&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.简单测试代码如下：
<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_0_18_Open_Image" onclick="this.style.display='none'; Codehighlighter1_0_18_Open_Text.style.display='none'; Codehighlighter1_0_18_Closed_Image.style.display='inline'; Codehighlighter1_0_18_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_0_18_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_0_18_Closed_Text.style.display='none'; Codehighlighter1_0_18_Open_Image.style.display='inline'; Codehighlighter1_0_18_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span id="Codehighlighter1_0_18_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">/**&nbsp;*/</span><span id="Codehighlighter1_0_18_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;*&nbsp;定义一个抽象工厂<br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img id="Codehighlighter1_49_89_Open_Image" onclick="this.style.display='none'; Codehighlighter1_49_89_Open_Text.style.display='none'; Codehighlighter1_49_89_Closed_Image.style.display='inline'; Codehighlighter1_49_89_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_49_89_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_49_89_Closed_Text.style.display='none'; Codehighlighter1_49_89_Open_Image.style.display='inline'; Codehighlighter1_49_89_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">interface</span><span style="color: #000000">&nbsp;ICarFactory&nbsp;</span><span id="Codehighlighter1_49_89_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 alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_49_89_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img id="Codehighlighter1_54_70_Open_Image" onclick="this.style.display='none'; Codehighlighter1_54_70_Open_Text.style.display='none'; Codehighlighter1_54_70_Closed_Image.style.display='inline'; Codehighlighter1_54_70_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_54_70_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_54_70_Closed_Text.style.display='none'; Codehighlighter1_54_70_Open_Image.style.display='inline'; Codehighlighter1_54_70_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_54_70_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">/**&nbsp;*/</span><span id="Codehighlighter1_54_70_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;工厂方法<br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;ICar&nbsp;factory();<br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img id="Codehighlighter1_139_191_Open_Image" onclick="this.style.display='none'; Codehighlighter1_139_191_Open_Text.style.display='none'; Codehighlighter1_139_191_Closed_Image.style.display='inline'; Codehighlighter1_139_191_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_139_191_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_139_191_Closed_Text.style.display='none'; Codehighlighter1_139_191_Open_Image.style.display='inline'; Codehighlighter1_139_191_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;BMWFactory&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;ICarFactory&nbsp;</span><span id="Codehighlighter1_139_191_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 alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_139_191_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img id="Codehighlighter1_165_188_Open_Image" onclick="this.style.display='none'; Codehighlighter1_165_188_Open_Text.style.display='none'; Codehighlighter1_165_188_Closed_Image.style.display='inline'; Codehighlighter1_165_188_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_165_188_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_165_188_Closed_Text.style.display='none'; Codehighlighter1_165_188_Open_Image.style.display='inline'; Codehighlighter1_165_188_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;ICar&nbsp;factory()&nbsp;</span><span id="Codehighlighter1_165_188_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 alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_165_188_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;BMW();<br />
</span><span style="color: #008080">16</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">17</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
</span><span style="color: #008080">18</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">19</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">20</span><span style="color: #000000"><img id="Codehighlighter1_242_295_Open_Image" onclick="this.style.display='none'; Codehighlighter1_242_295_Open_Text.style.display='none'; Codehighlighter1_242_295_Closed_Image.style.display='inline'; Codehighlighter1_242_295_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_242_295_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_242_295_Closed_Text.style.display='none'; Codehighlighter1_242_295_Open_Image.style.display='inline'; Codehighlighter1_242_295_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;BenzFactory&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;ICarFactory&nbsp;</span><span id="Codehighlighter1_242_295_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 alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_242_295_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">21</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
</span><span style="color: #008080">22</span><span style="color: #000000"><img id="Codehighlighter1_268_292_Open_Image" onclick="this.style.display='none'; Codehighlighter1_268_292_Open_Text.style.display='none'; Codehighlighter1_268_292_Closed_Image.style.display='inline'; Codehighlighter1_268_292_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_268_292_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_268_292_Closed_Text.style.display='none'; Codehighlighter1_268_292_Open_Image.style.display='inline'; Codehighlighter1_268_292_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;ICar&nbsp;factory()&nbsp;</span><span id="Codehighlighter1_268_292_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 alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_268_292_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">23</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Benz();<br />
</span><span style="color: #008080">24</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">25</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
</span><span style="color: #008080">26</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">27</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">28</span><span style="color: #000000"><img id="Codehighlighter1_298_317_Open_Image" onclick="this.style.display='none'; Codehighlighter1_298_317_Open_Text.style.display='none'; Codehighlighter1_298_317_Closed_Image.style.display='inline'; Codehighlighter1_298_317_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_298_317_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_298_317_Closed_Text.style.display='none'; Codehighlighter1_298_317_Open_Image.style.display='inline'; Codehighlighter1_298_317_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_298_317_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">/**&nbsp;*/</span><span id="Codehighlighter1_298_317_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
</span><span style="color: #008080">29</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;*&nbsp;定义一个产品的接口<br />
</span><span style="color: #008080">30</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">31</span><span style="color: #000000"><img id="Codehighlighter1_341_358_Open_Image" onclick="this.style.display='none'; Codehighlighter1_341_358_Open_Text.style.display='none'; Codehighlighter1_341_358_Closed_Image.style.display='inline'; Codehighlighter1_341_358_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_341_358_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_341_358_Closed_Text.style.display='none'; Codehighlighter1_341_358_Open_Image.style.display='inline'; Codehighlighter1_341_358_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">interface</span><span style="color: #000000">&nbsp;ICar&nbsp;</span><span id="Codehighlighter1_341_358_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 alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_341_358_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">32</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;start();<br />
</span><span style="color: #008080">33</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">34</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">35</span><span style="color: #000000"><img id="Codehighlighter1_395_463_Open_Image" onclick="this.style.display='none'; Codehighlighter1_395_463_Open_Text.style.display='none'; Codehighlighter1_395_463_Closed_Image.style.display='inline'; Codehighlighter1_395_463_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_395_463_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_395_463_Closed_Text.style.display='none'; Codehighlighter1_395_463_Open_Image.style.display='inline'; Codehighlighter1_395_463_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Benz&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;ICar&nbsp;</span><span id="Codehighlighter1_395_463_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 alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_395_463_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">36</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
</span><span style="color: #008080">37</span><span style="color: #000000"><img id="Codehighlighter1_419_459_Open_Image" onclick="this.style.display='none'; Codehighlighter1_419_459_Open_Text.style.display='none'; Codehighlighter1_419_459_Closed_Image.style.display='inline'; Codehighlighter1_419_459_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_419_459_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_419_459_Closed_Text.style.display='none'; Codehighlighter1_419_459_Open_Image.style.display='inline'; Codehighlighter1_419_459_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;start()&nbsp;</span><span id="Codehighlighter1_419_459_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 alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_419_459_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">38</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Benz&nbsp;start.</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">39</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">40</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">41</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">42</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">43</span><span style="color: #000000"><img id="Codehighlighter1_499_567_Open_Image" onclick="this.style.display='none'; Codehighlighter1_499_567_Open_Text.style.display='none'; Codehighlighter1_499_567_Closed_Image.style.display='inline'; Codehighlighter1_499_567_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_499_567_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_499_567_Closed_Text.style.display='none'; Codehighlighter1_499_567_Open_Image.style.display='inline'; Codehighlighter1_499_567_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;BMW&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;ICar&nbsp;</span><span id="Codehighlighter1_499_567_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 alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_499_567_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">44</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">45</span><span style="color: #000000"><img id="Codehighlighter1_524_565_Open_Image" onclick="this.style.display='none'; Codehighlighter1_524_565_Open_Text.style.display='none'; Codehighlighter1_524_565_Closed_Image.style.display='inline'; Codehighlighter1_524_565_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_524_565_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_524_565_Closed_Text.style.display='none'; Codehighlighter1_524_565_Open_Image.style.display='inline'; Codehighlighter1_524_565_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;start()&nbsp;</span><span id="Codehighlighter1_524_565_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 alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_524_565_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">46</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">BMW()&nbsp;start.</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">47</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">48</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">49</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">50</span><span style="color: #000000"><img id="Codehighlighter1_570_588_Open_Image" onclick="this.style.display='none'; Codehighlighter1_570_588_Open_Text.style.display='none'; Codehighlighter1_570_588_Closed_Image.style.display='inline'; Codehighlighter1_570_588_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_570_588_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_570_588_Closed_Text.style.display='none'; Codehighlighter1_570_588_Open_Image.style.display='inline'; Codehighlighter1_570_588_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_570_588_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">/**&nbsp;*/</span><span id="Codehighlighter1_570_588_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
</span><span style="color: #008080">51</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;*&nbsp;测试工厂方法模式<br />
</span><span style="color: #008080">52</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">53</span><span style="color: #000000"><img id="Codehighlighter1_621_888_Open_Image" onclick="this.style.display='none'; Codehighlighter1_621_888_Open_Text.style.display='none'; Codehighlighter1_621_888_Closed_Image.style.display='inline'; Codehighlighter1_621_888_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_621_888_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_621_888_Closed_Text.style.display='none'; Codehighlighter1_621_888_Open_Image.style.display='inline'; Codehighlighter1_621_888_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;TestFactoryMethod&nbsp;</span><span id="Codehighlighter1_621_888_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 alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_621_888_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">54</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
</span><span style="color: #008080">55</span><span style="color: #000000"><img id="Codehighlighter1_664_886_Open_Image" onclick="this.style.display='none'; Codehighlighter1_664_886_Open_Text.style.display='none'; Codehighlighter1_664_886_Closed_Image.style.display='inline'; Codehighlighter1_664_886_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_664_886_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_664_886_Closed_Text.style.display='none'; Codehighlighter1_664_886_Open_Image.style.display='inline'; Codehighlighter1_664_886_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&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">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span id="Codehighlighter1_664_886_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 alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_664_886_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">56</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">57</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ICarFactory&nbsp;carFactory&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;BMWFactory();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">BMW工厂</span><span style="color: #008000"><br />
</span><span style="color: #008080">58</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ICar&nbsp;car&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;carFactory.factory();<br />
</span><span style="color: #008080">59</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;car.start();<br />
</span><span style="color: #008080">60</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">61</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ICarFactory&nbsp;carFactory1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;BenzFactory();&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Benz工厂</span><span style="color: #008000"><br />
</span><span style="color: #008080">62</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ICar&nbsp;car1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;carFactory1.factory();<br />
</span><span style="color: #008080">63</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;car1.start();<br />
</span><span style="color: #008080">64</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">65</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">66</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>
<br />
三、在Java中的使用<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.在集合中的运用<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;java.util.Collection&nbsp; 中 iterator()方法&nbsp;&nbsp;--&gt;&nbsp;通过这个方法创建Iterator对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;java.uitl.Iterator&nbsp;&nbsp;&nbsp;&nbsp;
  <img src ="http://www.blogjava.net/xiaofei-suman/aggbug/246784.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaofei-suman/" target="_blank">齐纳尔多</a> 2008-12-17 09:55 <a href="http://www.blogjava.net/xiaofei-suman/articles/246784.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《java与模式》(阎宏) 学习笔记II(简单工厂模式)</title><link>http://www.blogjava.net/xiaofei-suman/articles/246673.html</link><dc:creator>齐纳尔多</dc:creator><author>齐纳尔多</author><pubDate>Tue, 16 Dec 2008 09:07:00 GMT</pubDate><guid>http://www.blogjava.net/xiaofei-suman/articles/246673.html</guid><wfw:comment>http://www.blogjava.net/xiaofei-suman/comments/246673.html</wfw:comment><comments>http://www.blogjava.net/xiaofei-suman/articles/246673.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaofei-suman/comments/commentRss/246673.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaofei-suman/services/trackbacks/246673.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 一、创建模式(Creational Pattern) --&gt; 对类的实例化过程的抽象化&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;分类：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a.类的创建模式&nbsp;&nbsp;&...&nbsp;&nbsp;<a href='http://www.blogjava.net/xiaofei-suman/articles/246673.html'>阅读全文</a><img src ="http://www.blogjava.net/xiaofei-suman/aggbug/246673.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaofei-suman/" target="_blank">齐纳尔多</a> 2008-12-16 17:07 <a href="http://www.blogjava.net/xiaofei-suman/articles/246673.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《java与模式》(阎宏) 学习笔记I</title><link>http://www.blogjava.net/xiaofei-suman/articles/246558.html</link><dc:creator>齐纳尔多</dc:creator><author>齐纳尔多</author><pubDate>Tue, 16 Dec 2008 02:09:00 GMT</pubDate><guid>http://www.blogjava.net/xiaofei-suman/articles/246558.html</guid><wfw:comment>http://www.blogjava.net/xiaofei-suman/comments/246558.html</wfw:comment><comments>http://www.blogjava.net/xiaofei-suman/articles/246558.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xiaofei-suman/comments/commentRss/246558.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xiaofei-suman/services/trackbacks/246558.html</trackback:ping><description><![CDATA[<p>一、uml的学习，了解<br />
1.类图(主要）<br />
<img alt="" src="http://www.blogjava.net/images/blogjava_net/xiaofei-suman/uml.gif" border="0" /><br />
2.时序图(箭头、生命线--垂直的虚线、激活条）<br />
3.状态图<br />
<br />
二、设计原则<br />
1.软件系统的核心的软件的可维护性（maintainability）和可重用性（Reusability）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I、软件维护性低的4点原因（过于僵硬Rigidity、过于脆弱Flagility、复用性低Immobility、黏度过高viscosity）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;II、设计目标3条：(可扩展性Extensibility、灵活性Flexibility、可插入性Pluggability)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;III、面向对象的复用：复用焦点的倒转说的是复用不再集中到函数和算法的具体实现上，而是集中到最重要的业务逻辑上去。<br />
2.设计原则<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I、开闭原则(Open-Closed-Principle)&nbsp;&nbsp;&nbsp;&nbsp;----&gt;&nbsp;OOD 的根本<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;定义：&nbsp;就是软件实体应该对扩展开放，对修改关闭。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如何实现：关键在于抽象化（就是说给系统定义出一个不再更改的抽象设计，此设计允许有无穷无尽的的行为在实现层被实现）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;对可变性的封装原则（Principle of Encapsulation of Variation EVP 这是OCP的另一个角度的说法)&nbsp;&nbsp;:定义是找到一个可变的因素，将其封装起来。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一种重构做法的讨论：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"将条件转移语句改写为多态性"&nbsp;是广为流传的代码重构的做法，要注意使用的场合（从OCP出发）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;java.util.Calendar&nbsp;不符合开闭原则，&nbsp;<img height="20" alt="" src="http://www.blogjava.net/Emoticons/QQ/14.gif" width="20" border="0" /><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;II、接口和抽象类<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.抽象类是用来继承的，具体类不是用来继承的（认真体会）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.抽象类应该拥有尽可能多的代码，尽可能少的数据<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.不要滥用继承，哪何时使用继承呢？<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;满足4条可使用继承（<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a.子为父的特殊种类，而不是一个角色 是is-a关系，而不是(has-a关系--&gt;聚合Aggregation）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b.永远不会出现需要将一个子类转换成另一个子类的情况<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c.子类具有扩展超类的责任，而不是置换掉（override）或者&nbsp;注销掉(Nullify) 的责任<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d.只有在分类学有意义时，才可以使用继承，不要从工具类继承<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;III、里氏代换原则（Liskov Substitution Principle LSP）----&gt; 是继承复用的根本<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.定义：一个软件实体如果使用的一个超类的话，那么一定适用于子类，而且根本察觉不到超类对象和子类对象的区别。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(换言之---&gt; 父类使用的地方，一定可以替换成子类)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.Java语言可以在编译期间可以从无关业务逻辑、语法上检查一个程序是否符合LSP(比如说：子类中override父类的一个方法时其访问权限不能更小)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.LSP说的是超类和子类之间的关系。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IV、依赖倒转原则（Dependency&nbsp; Inversion Principle）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.定义： 要依赖于抽象，不要依赖于具体<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.依赖（耦合）关系<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a.零耦合（Nil Coupling）两个类没有耦合关系<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b.具体耦合（Concrete Coupling）两个具体类之间,一个类对另一个类直接调用造成<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c.抽象耦合（Abstract Coupling） 一个抽象类和一个具体类之间<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.具体说明：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a.DIP 要求客户端依赖于抽象耦合<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b.表述一: 抽象不应该依赖于细节，细节应该依赖于抽象(Abstractions should not depend upon details,Details should depend upon abstractions)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c.表述二:要针对于接口编程，不要针对于实现编程（Program to an interface not&nbsp; an implementation）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;具体来说：针对于接口编程，就是使用Java接口和抽象Java类进行 变量的类型声明、参数的类型声明、方法返回值的类型声明、数据类型的转换<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;反之，就是不使用<img alt="" src="/CuteSoft_Client/CuteEditor/images/emsmiled.gif" align="absMiddle" border="0" />&nbsp; 如何做到呢？？一个具体的Java类应该只实现Java接口和抽象Java类中声明过的方法，而不应该写其他多余的方法<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4.变量的静态类型和变量的实际类型<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a.静态类型(Static Type)： 变量被声明时的类型,又称明显类型（Apparent Type)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b.实际类型(Actual Type)：&nbsp;&nbsp;变量所引用对象的真实类型<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;比如： List employees = new Vector();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//List为静态类型，Vector为实际类型<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c.作用： 要引用对象的抽象类型--&gt; 如果一个对象有一个抽象类型的话，应该使用此抽象类型作为对象的静态类型.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List employees = new Vector();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;代替 Vector&nbsp;employees = new Vector();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List employees = new ArrayList();&nbsp;&nbsp;&nbsp;&nbsp;//面向抽象编程&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这里有一定的问题，其构造还是具体类的构造，需要通过模式改进。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5.如何做到依赖倒转？<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a.关键点：以抽象方式耦合<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6.Java对抽象类型的支持<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a.提供了两种支持：接口和抽象类<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b.接口和抽象类区别<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.抽象类可以提供部分方法的实现，而接口不可以<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.子类只能继承1个抽象类,而接口的实现类却可以实现多个接口<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.从代码重构的角度看，将一个具体类重构成一个接口的实现很容易，而抽象类却比较复杂<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4.Java接口是定义混合类型(Mixin Type) 的理想工具&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;比如Hashtable&nbsp;其主类型是Map&nbsp;次类型为Clonable Serializable<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7.联合使用Java接口和Java抽象类<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;具体说明：声明一个接口，给出一个抽象类实现此接口，在抽象类中具体实现此接口中的方法，可以程序就可以选择实现接口或者继承此抽象类<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;称为&#8220;缺省适配模式（Default Adapter）&#8221;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;参看Java API&nbsp;(abstract +&nbsp;接口名）&nbsp;就使用这样的 Default Adapter 比如Collection --&gt;&nbsp;AbstractCollection<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8.优缺点：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a.强大，但不容易实现（需要很好的oop思想）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b.DIP:假定所有的具体类都是变化的，这不太准确，有些具体类是相对稳定的，就不需要再使用抽象了~&#183;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;V、接口隔离原则（Interface Segeration Principle ISP)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.定义： 使用多个专门的接口比使用单一的总接口要好~,但不要提供不必要的接口，否则可能造成接口污染（interface Contamination）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.&#8220;接口&#8221;的理解：&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a.一个类中所有方法的集合(角色隔离原则)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b.真正意义上的接口（interface)（定制服务原则：Customized Service）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VI、组合/聚合复用原则（Composition/Aggregation Reuse Principle&nbsp; CARP）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.定义：在一个新的对象里面使用一些已有的对象，使之称为新对象的一部分，新的对象通过向这些对象委派达到复用已有功能的目的<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;简言之：尽量使用聚合组合，不要使用继承<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.复用<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a.组合/聚合<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b.继承<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VII、迪米特法则（Law of Demeter&nbsp; LOD）--&gt;&nbsp;Least Knowledge Principle&nbsp;最少知识原则<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.定义：一个对象应该对另一个对象有尽可能少的了解<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.如果两个类不必彼此通信，那么这两个类也不必发生相互作用，如果其中一个类需要调用另一个类的方法，可以通过第三者转发这种调用.&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.使用说明：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a.优先考虑将一个类设置为不变类<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b.尽量降低一个类的访问权限<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c.慎用Serializable&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d.尽量降低成员的访问权限<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
  <img src ="http://www.blogjava.net/xiaofei-suman/aggbug/246558.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xiaofei-suman/" target="_blank">齐纳尔多</a> 2008-12-16 10:09 <a href="http://www.blogjava.net/xiaofei-suman/articles/246558.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>