﻿<?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/sailor/category/33145.html</link><description>在一网情深的日子里，谁能说得清是苦是甜，只知道确定了就义无反顾</description><language>zh-cn</language><lastBuildDate>Sat, 26 Jul 2008 08:19:34 GMT</lastBuildDate><pubDate>Sat, 26 Jul 2008 08:19:34 GMT</pubDate><ttl>60</ttl><item><title>模式（九）：模板方法（Template Method）模式</title><link>http://www.blogjava.net/sailor/articles/217607.html</link><dc:creator>sailor</dc:creator><author>sailor</author><pubDate>Sat, 26 Jul 2008 00:25:00 GMT</pubDate><guid>http://www.blogjava.net/sailor/articles/217607.html</guid><wfw:comment>http://www.blogjava.net/sailor/comments/217607.html</wfw:comment><comments>http://www.blogjava.net/sailor/articles/217607.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sailor/comments/commentRss/217607.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sailor/services/trackbacks/217607.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 定义&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在一个方法中定义一个算法的骨架，而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下，重新定义算法中的某些步骤。&nbsp;&nbsp;&nbsp;&nbsp;钩子&nbsp;&nbsp;&nbsp;&nbsp;钩子是一种被声明在抽象类中的方法，但只有空...&nbsp;&nbsp;<a href='http://www.blogjava.net/sailor/articles/217607.html'>阅读全文</a><img src ="http://www.blogjava.net/sailor/aggbug/217607.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sailor/" target="_blank">sailor</a> 2008-07-26 08:25 <a href="http://www.blogjava.net/sailor/articles/217607.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>模式（八）：外观（Facade）模式</title><link>http://www.blogjava.net/sailor/articles/217379.html</link><dc:creator>sailor</dc:creator><author>sailor</author><pubDate>Fri, 25 Jul 2008 02:26:00 GMT</pubDate><guid>http://www.blogjava.net/sailor/articles/217379.html</guid><wfw:comment>http://www.blogjava.net/sailor/comments/217379.html</wfw:comment><comments>http://www.blogjava.net/sailor/articles/217379.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sailor/comments/commentRss/217379.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sailor/services/trackbacks/217379.html</trackback:ping><description><![CDATA[<p><strong>定义</strong><br />
&nbsp;&nbsp;&nbsp;提供了一个统一的接口，用来访问字系统中的一群接口，外观定义了一个高层接口，让子系统更容易使用。<br />
<br />
<strong>要点</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当需要简化并统一一个很大的接口或者一群复杂的接口时，使用外观。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;外观将客户从一个复杂的子系统中解耦。</p>
<br />
&nbsp;&nbsp;&nbsp;&nbsp;实现一个外观，需要将子系统组合进外观中，然后将工作委托给子系统执行。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;外观将一群对象&#8220;包装&#8221;起来以简化其接口。<br />
<br />
<strong>实例</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;<img style="width: 531px; height: 411px" height="411" alt="" src="http://www.blogjava.net/images/blogjava_net/sailor/UML/adapter.gif" width="531" border="0" /><br />
<br />
例子：http://www.jdon.com/designpatterns/designpattern_Facade.htm<br />
<br />
参考资料：《First Head 设计模式》<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://www.jdon.com/designpatterns/designpattern_Facade.htm
<img src ="http://www.blogjava.net/sailor/aggbug/217379.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sailor/" target="_blank">sailor</a> 2008-07-25 10:26 <a href="http://www.blogjava.net/sailor/articles/217379.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>模式（七）：适配器（Adapter）模式</title><link>http://www.blogjava.net/sailor/articles/217347.html</link><dc:creator>sailor</dc:creator><author>sailor</author><pubDate>Fri, 25 Jul 2008 01:17:00 GMT</pubDate><guid>http://www.blogjava.net/sailor/articles/217347.html</guid><wfw:comment>http://www.blogjava.net/sailor/comments/217347.html</wfw:comment><comments>http://www.blogjava.net/sailor/articles/217347.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sailor/comments/commentRss/217347.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sailor/services/trackbacks/217347.html</trackback:ping><description><![CDATA[<p><strong>定义<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;将一个类的接口，转换成客户期望的另一个接口。适配器让原本不兼容的类可以合作无间。<br />
<span style="font-size: 14pt; font-family: 'Times New Roman'"><br />
<font size="3">&nbsp;&nbsp;&nbsp;&nbsp;类适配器可以分为类适配器和对象适配器</font><br />
</span><br />
<img height="339" alt="adapter.bmp" src="http://www.blogjava.net/images/blogjava_net/flying/adapter.bmp" width="481" align="center" border="0" /><br />
<strong>实用性<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;当需要私用一个现有的类而其接口并不符合你需要的时，就使用适配器；<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;适配器改变接口以符合用户的期望；<br />
<br />
<strong>实例<br />
<br />
<img alt="" src="http://www.blogjava.net/images/blogjava_net/sailor/adapter.JPG" border="0" /><br />
<br />
<br />
</strong></p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.sailor.adapter;<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img id="Codehighlighter1_30_89_Open_Image" onclick="this.style.display='none'; Codehighlighter1_30_89_Open_Text.style.display='none'; Codehighlighter1_30_89_Closed_Image.style.display='inline'; Codehighlighter1_30_89_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_30_89_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_30_89_Closed_Text.style.display='none'; Codehighlighter1_30_89_Open_Image.style.display='inline'; Codehighlighter1_30_89_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_30_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">/**&nbsp;*/</span><span id="Codehighlighter1_30_89_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;5</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;6</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;*&nbsp;</span><span style="color: #808080">@author</span><span style="color: #008000">&nbsp;sailor<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;*&nbsp;Jul&nbsp;25,&nbsp;2008&nbsp;9:35:19&nbsp;AM<br />
</span><span style="color: #008080">&nbsp;8</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;9</span><span style="color: #000000"><img id="Codehighlighter1_109_252_Open_Image" onclick="this.style.display='none'; Codehighlighter1_109_252_Open_Text.style.display='none'; Codehighlighter1_109_252_Closed_Image.style.display='inline'; Codehighlighter1_109_252_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_109_252_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_109_252_Closed_Text.style.display='none'; Codehighlighter1_109_252_Open_Image.style.display='inline'; Codehighlighter1_109_252_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;Duck&nbsp;</span><span id="Codehighlighter1_109_252_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_109_252_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">10</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">11</span><span style="color: #000000"><img id="Codehighlighter1_128_132_Open_Image" onclick="this.style.display='none'; Codehighlighter1_128_132_Open_Text.style.display='none'; Codehighlighter1_128_132_Closed_Image.style.display='inline'; Codehighlighter1_128_132_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_128_132_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_128_132_Closed_Text.style.display='none'; Codehighlighter1_128_132_Open_Image.style.display='inline'; Codehighlighter1_128_132_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;Duck()&nbsp;</span><span id="Codehighlighter1_128_132_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_128_132_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">13</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">14</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img id="Codehighlighter1_153_191_Open_Image" onclick="this.style.display='none'; Codehighlighter1_153_191_Open_Text.style.display='none'; Codehighlighter1_153_191_Closed_Image.style.display='inline'; Codehighlighter1_153_191_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_153_191_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_153_191_Closed_Text.style.display='none'; Codehighlighter1_153_191_Open_Image.style.display='inline'; Codehighlighter1_153_191_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;fly()</span><span id="Codehighlighter1_153_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_153_191_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="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">I&nbsp;can&nbsp;fly</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">17</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">18</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">19</span><span style="color: #000000"><img id="Codehighlighter1_215_250_Open_Image" onclick="this.style.display='none'; Codehighlighter1_215_250_Open_Text.style.display='none'; Codehighlighter1_215_250_Closed_Image.style.display='inline'; Codehighlighter1_215_250_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_215_250_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_215_250_Closed_Text.style.display='none'; Codehighlighter1_215_250_Open_Image.style.display='inline'; Codehighlighter1_215_250_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;quack()</span><span id="Codehighlighter1_215_250_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_215_250_Open_Text"><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="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">quake!</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">21</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">22</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">23</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p><br />
&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.sailor.adapter;<br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img id="Codehighlighter1_30_89_Open_Image" onclick="this.style.display='none'; Codehighlighter1_30_89_Open_Text.style.display='none'; Codehighlighter1_30_89_Closed_Image.style.display='inline'; Codehighlighter1_30_89_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_30_89_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_30_89_Closed_Text.style.display='none'; Codehighlighter1_30_89_Open_Image.style.display='inline'; Codehighlighter1_30_89_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_30_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">/**&nbsp;*/</span><span id="Codehighlighter1_30_89_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;5</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;6</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;*&nbsp;</span><span style="color: #808080">@author</span><span style="color: #008000">&nbsp;sailor<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;*&nbsp;Jul&nbsp;25,&nbsp;2008&nbsp;9:43:35&nbsp;AM<br />
</span><span style="color: #008080">&nbsp;8</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;9</span><span style="color: #000000"><img id="Codehighlighter1_115_161_Open_Image" onclick="this.style.display='none'; Codehighlighter1_115_161_Open_Text.style.display='none'; Codehighlighter1_115_161_Closed_Image.style.display='inline'; Codehighlighter1_115_161_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_115_161_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_115_161_Closed_Text.style.display='none'; Codehighlighter1_115_161_Open_Image.style.display='inline'; Codehighlighter1_115_161_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;Turkey&nbsp;</span><span id="Codehighlighter1_115_161_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_115_161_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">11</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;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;gobble();<br />
</span><span style="color: #008080">12</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;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;fly();<br />
</span><span style="color: #008080">13</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">14</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p><br />
&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.sailor.adapter;<br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img id="Codehighlighter1_30_88_Open_Image" onclick="this.style.display='none'; Codehighlighter1_30_88_Open_Text.style.display='none'; Codehighlighter1_30_88_Closed_Image.style.display='inline'; Codehighlighter1_30_88_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_30_88_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_30_88_Closed_Text.style.display='none'; Codehighlighter1_30_88_Open_Image.style.display='inline'; Codehighlighter1_30_88_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_30_88_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_30_88_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;5</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;6</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;*&nbsp;</span><span style="color: #808080">@author</span><span style="color: #008000">&nbsp;sailor<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;*&nbsp;Jul&nbsp;25,&nbsp;2008&nbsp;9:38:10&nbsp;AM<br />
</span><span style="color: #008080">&nbsp;8</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;9</span><span style="color: #000000"><img id="Codehighlighter1_134_303_Open_Image" onclick="this.style.display='none'; Codehighlighter1_134_303_Open_Text.style.display='none'; Codehighlighter1_134_303_Closed_Image.style.display='inline'; Codehighlighter1_134_303_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_134_303_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_134_303_Closed_Text.style.display='none'; Codehighlighter1_134_303_Open_Image.style.display='inline'; Codehighlighter1_134_303_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;TurkeyAdapter&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;Turkey</span><span id="Codehighlighter1_134_303_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_134_303_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Duck&nbsp;duck;<br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img id="Codehighlighter1_191_214_Open_Image" onclick="this.style.display='none'; Codehighlighter1_191_214_Open_Text.style.display='none'; Codehighlighter1_191_214_Closed_Image.style.display='inline'; Codehighlighter1_191_214_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_191_214_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_191_214_Closed_Text.style.display='none'; Codehighlighter1_191_214_Open_Image.style.display='inline'; Codehighlighter1_191_214_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;TurkeyAdapter(Duck&nbsp;duck)&nbsp;</span><span id="Codehighlighter1_191_214_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_191_214_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">14</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">this</span><span style="color: #000000">.duck&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;duck;<br />
</span><span style="color: #008080">15</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">16</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">17</span><span style="color: #000000"><img id="Codehighlighter1_239_258_Open_Image" onclick="this.style.display='none'; Codehighlighter1_239_258_Open_Text.style.display='none'; Codehighlighter1_239_258_Closed_Image.style.display='inline'; Codehighlighter1_239_258_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_239_258_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_239_258_Closed_Text.style.display='none'; Codehighlighter1_239_258_Open_Image.style.display='inline'; Codehighlighter1_239_258_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;gobble()</span><span id="Codehighlighter1_239_258_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_239_258_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;duck.quack();<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="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">21</span><span style="color: #000000"><img id="Codehighlighter1_280_297_Open_Image" onclick="this.style.display='none'; Codehighlighter1_280_297_Open_Text.style.display='none'; Codehighlighter1_280_297_Closed_Image.style.display='inline'; Codehighlighter1_280_297_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_280_297_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_280_297_Closed_Text.style.display='none'; Codehighlighter1_280_297_Open_Image.style.display='inline'; Codehighlighter1_280_297_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;fly()</span><span id="Codehighlighter1_280_297_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_280_297_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;duck.fly();<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="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">25</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">26</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">27</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p><br />
&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.sailor.adapter;<br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img id="Codehighlighter1_30_88_Open_Image" onclick="this.style.display='none'; Codehighlighter1_30_88_Open_Text.style.display='none'; Codehighlighter1_30_88_Closed_Image.style.display='inline'; Codehighlighter1_30_88_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_30_88_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_30_88_Closed_Text.style.display='none'; Codehighlighter1_30_88_Open_Image.style.display='inline'; Codehighlighter1_30_88_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_30_88_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_30_88_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;5</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;6</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;*&nbsp;</span><span style="color: #808080">@author</span><span style="color: #008000">&nbsp;sailor<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;*&nbsp;Jul&nbsp;25,&nbsp;2008&nbsp;9:45:29&nbsp;AM<br />
</span><span style="color: #008080">&nbsp;8</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;9</span><span style="color: #000000"><img id="Codehighlighter1_110_298_Open_Image" onclick="this.style.display='none'; Codehighlighter1_110_298_Open_Text.style.display='none'; Codehighlighter1_110_298_Closed_Image.style.display='inline'; Codehighlighter1_110_298_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_110_298_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_110_298_Closed_Text.style.display='none'; Codehighlighter1_110_298_Open_Image.style.display='inline'; Codehighlighter1_110_298_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;Client&nbsp;</span><span id="Codehighlighter1_110_298_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_110_298_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img id="Codehighlighter1_114_137_Open_Image" onclick="this.style.display='none'; Codehighlighter1_114_137_Open_Text.style.display='none'; Codehighlighter1_114_137_Closed_Image.style.display='inline'; Codehighlighter1_114_137_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_114_137_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_114_137_Closed_Text.style.display='none'; Codehighlighter1_114_137_Open_Image.style.display='inline'; Codehighlighter1_114_137_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_114_137_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_114_137_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
</span><span style="color: #008080">12</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">13</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">14</span><span style="color: #000000"><img id="Codehighlighter1_179_295_Open_Image" onclick="this.style.display='none'; Codehighlighter1_179_295_Open_Text.style.display='none'; Codehighlighter1_179_295_Closed_Image.style.display='inline'; Codehighlighter1_179_295_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_179_295_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_179_295_Closed_Text.style.display='none'; Codehighlighter1_179_295_Open_Image.style.display='inline'; Codehighlighter1_179_295_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_179_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 src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_179_295_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">15</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">16</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;Duck&nbsp;duck&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Duck();<br />
</span><span style="color: #008080">17</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">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;Turkey&nbsp;turkey&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;TurkeyAdapter(duck);<br />
</span><span style="color: #008080">19</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">20</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;turkey.gobble();<br />
</span><span style="color: #008080">21</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;turkey.fly();<br />
</span><span style="color: #008080">22</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">23</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">24</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">25</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;参考资料：《First Head 设计模式》</p>
<img src ="http://www.blogjava.net/sailor/aggbug/217347.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sailor/" target="_blank">sailor</a> 2008-07-25 09:17 <a href="http://www.blogjava.net/sailor/articles/217347.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>模式（六）：命令（Command）模式</title><link>http://www.blogjava.net/sailor/articles/217246.html</link><dc:creator>sailor</dc:creator><author>sailor</author><pubDate>Thu, 24 Jul 2008 09:20:00 GMT</pubDate><guid>http://www.blogjava.net/sailor/articles/217246.html</guid><wfw:comment>http://www.blogjava.net/sailor/comments/217246.html</wfw:comment><comments>http://www.blogjava.net/sailor/articles/217246.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sailor/comments/commentRss/217246.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sailor/services/trackbacks/217246.html</trackback:ping><description><![CDATA[<p><strong>定义</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;将&#8220;请求&#8221;封装成对象，以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。<br />
<br />
<strong>要点<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;命令模式将发出请求的对象和接受请求的对象解耦；<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;在被解耦的两者之间是通过命令对象进行沟通的。命令对象封装了接收者和一个或者一组对象；<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;调用者通过调用命令对象的execute()发出请求，这会使得接受者的动作被调用；<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;调用者可以接受命令当作参数，甚至在运行时动态地进行；<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;命令也可以实现日志和实务系统。<br />
<br />
<br />
<strong>所涉及的角色：<br />
1.客户（Client）角色：</strong>创建一个具体对象及其确定接收者.<br />
<strong>2.命令（Command）角色:</strong>声明了一个给所有具体命令类的抽象接口。<br />
<strong>3.具体命令(ConcreteCommand)角色:</strong>定义一个接收者与行为之间的弱耦合，实现exceute()方法，负责调用接收者的相应操作<strong>。<br />
4.请求者(Invoker)角色:</strong>负责调用命令对象执行请求。<br />
<strong>5.接收者（Recevice）角色:</strong>负责具体实施与执行一个请求。<br />
<strong><img height="265" alt="commmand.bmp" src="http://www.blogjava.net/images/blogjava_net/flying/commmand.bmp" width="602" border="0" /><br />
优点：<br />
</strong>解耦了发送者和接受者之间联系。 发送者调用一个操作，接受者接受请求执行相应的动作，因为使用Command模式解耦，发送者无需知道接受者任何接口。<br />
<br />
<strong>命令模式创建的一般步骤</strong>：<br />
1.客户端创建一个ConcreteCommand对象，并指明接收者。<br />
2.请求对象保持ConcreteCommand对象。<br />
3.请求对象通过调用action方法发出请求，若命令是可撤消,则ConcreteCommand保存execute()方法执行前的状态。<br />
4.ConcreteCommand对象调用接收的方法执行请求。<br />
<br />
<strong>实例<br />
抽象命令接口：<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;command;<br />
<img id="Codehighlighter1_41_69_Open_Image" onclick="this.style.display='none'; Codehighlighter1_41_69_Open_Text.style.display='none'; Codehighlighter1_41_69_Closed_Image.style.display='inline'; Codehighlighter1_41_69_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_41_69_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_41_69_Closed_Text.style.display='none'; Codehighlighter1_41_69_Open_Image.style.display='inline'; Codehighlighter1_41_69_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;Command</span><span id="Codehighlighter1_41_69_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_41_69_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">执行方法</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;execute();<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
<p>具体命令<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;command;<br />
<img id="Codehighlighter1_64_238_Open_Image" onclick="this.style.display='none'; Codehighlighter1_64_238_Open_Text.style.display='none'; Codehighlighter1_64_238_Closed_Image.style.display='inline'; Codehighlighter1_64_238_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_64_238_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_64_238_Closed_Text.style.display='none'; Codehighlighter1_64_238_Open_Image.style.display='inline'; Codehighlighter1_64_238_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;ConcreteCommand&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;Command</span><span id="Codehighlighter1_64_238_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_64_238_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">接收者</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Receiver&nbsp;receiver;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">构造方法</span><span style="color: #008000"><br />
<img id="Codehighlighter1_151_180_Open_Image" onclick="this.style.display='none'; Codehighlighter1_151_180_Open_Text.style.display='none'; Codehighlighter1_151_180_Closed_Image.style.display='inline'; Codehighlighter1_151_180_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_151_180_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_151_180_Closed_Text.style.display='none'; Codehighlighter1_151_180_Open_Image.style.display='inline'; Codehighlighter1_151_180_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;ConcreteCommand(Receiver&nbsp;receiver)</span><span id="Codehighlighter1_151_180_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_151_180_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.receiver</span><span style="color: #000000">=</span><span style="color: #000000">receiver;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">执行方法</span><span style="color: #008000"><br />
<img id="Codehighlighter1_212_236_Open_Image" onclick="this.style.display='none'; Codehighlighter1_212_236_Open_Text.style.display='none'; Codehighlighter1_212_236_Closed_Image.style.display='inline'; Codehighlighter1_212_236_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_212_236_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_212_236_Closed_Text.style.display='none'; Codehighlighter1_212_236_Open_Image.style.display='inline'; Codehighlighter1_212_236_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;execute()</span><span id="Codehighlighter1_212_236_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_212_236_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;receiver.action();<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
<p>接收者：<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;command;<br />
<img id="Codehighlighter1_40_152_Open_Image" onclick="this.style.display='none'; Codehighlighter1_40_152_Open_Text.style.display='none'; Codehighlighter1_40_152_Closed_Image.style.display='inline'; Codehighlighter1_40_152_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_40_152_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_40_152_Closed_Text.style.display='none'; Codehighlighter1_40_152_Open_Image.style.display='inline'; Codehighlighter1_40_152_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;&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Receiver&nbsp;</span><span id="Codehighlighter1_40_152_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_40_152_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">构造方法</span><span style="color: #008000"><br />
<img id="Codehighlighter1_68_69_Open_Image" onclick="this.style.display='none'; Codehighlighter1_68_69_Open_Text.style.display='none'; Codehighlighter1_68_69_Closed_Image.style.display='inline'; Codehighlighter1_68_69_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_68_69_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_68_69_Closed_Text.style.display='none'; Codehighlighter1_68_69_Open_Image.style.display='inline'; Codehighlighter1_68_69_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Receiver()</span><span id="Codehighlighter1_68_69_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_68_69_Open_Text"><span style="color: #000000">{}</span></span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">行为方法</span><span style="color: #008000"><br />
<img id="Codehighlighter1_101_150_Open_Image" onclick="this.style.display='none'; Codehighlighter1_101_150_Open_Text.style.display='none'; Codehighlighter1_101_150_Closed_Image.style.display='inline'; Codehighlighter1_101_150_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_101_150_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_101_150_Closed_Text.style.display='none'; Codehighlighter1_101_150_Open_Image.style.display='inline'; Codehighlighter1_101_150_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;action()</span><span id="Codehighlighter1_101_150_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_101_150_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">Action&nbsp;is&nbsp;taken&nbsp;here</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
<p>请求者：<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;command;<br />
<img id="Codehighlighter1_37_195_Open_Image" onclick="this.style.display='none'; Codehighlighter1_37_195_Open_Text.style.display='none'; Codehighlighter1_37_195_Closed_Image.style.display='inline'; Codehighlighter1_37_195_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_37_195_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_37_195_Closed_Text.style.display='none'; Codehighlighter1_37_195_Open_Image.style.display='inline'; Codehighlighter1_37_195_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;Invoker</span><span id="Codehighlighter1_37_195_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_37_195_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">命令</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Command&nbsp;command;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">构造方法</span><span style="color: #008000"><br />
<img id="Codehighlighter1_111_138_Open_Image" onclick="this.style.display='none'; Codehighlighter1_111_138_Open_Text.style.display='none'; Codehighlighter1_111_138_Closed_Image.style.display='inline'; Codehighlighter1_111_138_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_111_138_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_111_138_Closed_Text.style.display='none'; Codehighlighter1_111_138_Open_Image.style.display='inline'; Codehighlighter1_111_138_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Invoker(Command&nbsp;command)</span><span id="Codehighlighter1_111_138_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_111_138_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.command</span><span style="color: #000000">=</span><span style="color: #000000">command;<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">行为方法</span><span style="color: #008000"><br />
<img id="Codehighlighter1_169_193_Open_Image" onclick="this.style.display='none'; Codehighlighter1_169_193_Open_Text.style.display='none'; Codehighlighter1_169_193_Closed_Image.style.display='inline'; Codehighlighter1_169_193_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_169_193_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_169_193_Closed_Text.style.display='none'; Codehighlighter1_169_193_Open_Image.style.display='inline'; Codehighlighter1_169_193_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;action()</span><span id="Codehighlighter1_169_193_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_169_193_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;command.execute();<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
<p>客户端：<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;command;<br />
<img id="Codehighlighter1_36_243_Open_Image" onclick="this.style.display='none'; Codehighlighter1_36_243_Open_Text.style.display='none'; Codehighlighter1_36_243_Closed_Image.style.display='inline'; Codehighlighter1_36_243_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_36_243_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_36_243_Closed_Text.style.display='none'; Codehighlighter1_36_243_Open_Image.style.display='inline'; Codehighlighter1_36_243_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;Client</span><span id="Codehighlighter1_36_243_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_36_243_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_77_241_Open_Image" onclick="this.style.display='none'; Codehighlighter1_77_241_Open_Text.style.display='none'; Codehighlighter1_77_241_Closed_Image.style.display='inline'; Codehighlighter1_77_241_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_77_241_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_77_241_Closed_Text.style.display='none'; Codehighlighter1_77_241_Open_Image.style.display='inline'; Codehighlighter1_77_241_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)</span><span id="Codehighlighter1_77_241_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_77_241_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Receiver&nbsp;receiver</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Receiver();<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Command&nbsp;concreteCommand</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ConcreteCommand(receiver);<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Invoker&nbsp;invoker</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Invoker(concreteCommand);<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;invoker.action();<br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
<p>命令模式与责任链模式区别：<br />
责任链模式使一个特定的请求接收对象对请求与命令的执行变得不确定性.而命令模式使得一个特定的对象对命令的执行变得明显与确定.<br />
<br />
参考资料：《First Head 设计模式》<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 id="viewpost1_TitleUrl" href="http://www.blogjava.net/flying/archive/2006/08/15/63773.html">设计模式学习笔记(十五)--------命令(Command)模式</a></strong></p>
<img src ="http://www.blogjava.net/sailor/aggbug/217246.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sailor/" target="_blank">sailor</a> 2008-07-24 17:20 <a href="http://www.blogjava.net/sailor/articles/217246.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>模式（五）：单件（singleton）模式</title><link>http://www.blogjava.net/sailor/articles/216787.html</link><dc:creator>sailor</dc:creator><author>sailor</author><pubDate>Wed, 23 Jul 2008 01:51:00 GMT</pubDate><guid>http://www.blogjava.net/sailor/articles/216787.html</guid><wfw:comment>http://www.blogjava.net/sailor/comments/216787.html</wfw:comment><comments>http://www.blogjava.net/sailor/articles/216787.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sailor/comments/commentRss/216787.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sailor/services/trackbacks/216787.html</trackback:ping><description><![CDATA[<p>定义<br />
&nbsp;&nbsp;&nbsp;&nbsp;确保一个类只有一个实例，并提供全局访问点<br />
<br />
设计原则<br />
&nbsp;&nbsp;&nbsp;&nbsp;在JAVA中实现单件模式需要一个私有的构造器、一个静态方法和一个静态变量；<br />
&nbsp;&nbsp;&nbsp;&nbsp;确定在性能和资源上的限制，然后小心地选择适当的方案来实现单件，以解决多线程的问题；<br />
&nbsp;&nbsp;&nbsp;&nbsp;如果不是采用第五版的java 2，双重检查锁实现会失效；<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
实现<br />
&nbsp;&nbsp;&nbsp;&nbsp;1、lazy singleton<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img id="Codehighlighter1_22_248_Open_Image" onclick="this.style.display='none'; Codehighlighter1_22_248_Open_Text.style.display='none'; Codehighlighter1_22_248_Closed_Image.style.display='inline'; Codehighlighter1_22_248_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_22_248_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_22_248_Closed_Text.style.display='none'; Codehighlighter1_22_248_Open_Image.style.display='inline'; Codehighlighter1_22_248_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Singleton</span><span id="Codehighlighter1_22_248_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_22_248_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;Singleton&nbsp;uniqueInstance;<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img id="Codehighlighter1_88_89_Open_Image" onclick="this.style.display='none'; Codehighlighter1_88_89_Open_Text.style.display='none'; Codehighlighter1_88_89_Closed_Image.style.display='inline'; Codehighlighter1_88_89_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_88_89_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_88_89_Closed_Text.style.display='none'; Codehighlighter1_88_89_Open_Image.style.display='inline'; Codehighlighter1_88_89_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Singleton()</span><span id="Codehighlighter1_88_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_88_89_Open_Text"><span style="color: #000000">{}</span></span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">私有构造器</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img id="Codehighlighter1_139_246_Open_Image" onclick="this.style.display='none'; Codehighlighter1_139_246_Open_Text.style.display='none'; Codehighlighter1_139_246_Closed_Image.style.display='inline'; Codehighlighter1_139_246_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_139_246_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_139_246_Closed_Text.style.display='none'; Codehighlighter1_139_246_Open_Image.style.display='inline'; Codehighlighter1_139_246_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;Singleton&nbsp;getInstance()</span><span id="Codehighlighter1_139_246_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_246_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img id="Codehighlighter1_170_215_Open_Image" onclick="this.style.display='none'; Codehighlighter1_170_215_Open_Text.style.display='none'; Codehighlighter1_170_215_Closed_Image.style.display='inline'; Codehighlighter1_170_215_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_170_215_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_170_215_Closed_Text.style.display='none'; Codehighlighter1_170_215_Open_Image.style.display='inline'; Codehighlighter1_170_215_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(uniqueInstance&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)</span><span id="Codehighlighter1_170_215_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_170_215_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;uniqueInstance&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Singleton();<br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;}</span></span><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" />&nbsp;&nbsp;<br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;uniqueSingleton<br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">16</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;2、处理多线程<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这是保证可行的最直接做法，对于性能如果没有考虑，可以直接用这个方法。</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img id="Codehighlighter1_22_261_Open_Image" onclick="this.style.display='none'; Codehighlighter1_22_261_Open_Text.style.display='none'; Codehighlighter1_22_261_Closed_Image.style.display='inline'; Codehighlighter1_22_261_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_22_261_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_22_261_Closed_Text.style.display='none'; Codehighlighter1_22_261_Open_Image.style.display='inline'; Codehighlighter1_22_261_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Singleton</span><span id="Codehighlighter1_22_261_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_22_261_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;Singleton&nbsp;uniqueInstance;<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img id="Codehighlighter1_88_89_Open_Image" onclick="this.style.display='none'; Codehighlighter1_88_89_Open_Text.style.display='none'; Codehighlighter1_88_89_Closed_Image.style.display='inline'; Codehighlighter1_88_89_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_88_89_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_88_89_Closed_Text.style.display='none'; Codehighlighter1_88_89_Open_Image.style.display='inline'; Codehighlighter1_88_89_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Singleton()</span><span id="Codehighlighter1_88_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_88_89_Open_Text"><span style="color: #000000">{}</span></span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">私有构造器</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img id="Codehighlighter1_152_259_Open_Image" onclick="this.style.display='none'; Codehighlighter1_152_259_Open_Text.style.display='none'; Codehighlighter1_152_259_Closed_Image.style.display='inline'; Codehighlighter1_152_259_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_152_259_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_152_259_Closed_Text.style.display='none'; Codehighlighter1_152_259_Open_Image.style.display='inline'; Codehighlighter1_152_259_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&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: red"><strong>synchronized</strong></span><span style="color: #000000">&nbsp;Singleton&nbsp;getInstance()</span><span id="Codehighlighter1_152_259_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_152_259_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img id="Codehighlighter1_183_228_Open_Image" onclick="this.style.display='none'; Codehighlighter1_183_228_Open_Text.style.display='none'; Codehighlighter1_183_228_Closed_Image.style.display='inline'; Codehighlighter1_183_228_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_183_228_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_183_228_Closed_Text.style.display='none'; Codehighlighter1_183_228_Open_Image.style.display='inline'; Codehighlighter1_183_228_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(uniqueInstance&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)</span><span id="Codehighlighter1_183_228_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_183_228_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;uniqueInstance&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Singleton();<br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;}</span></span><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" />&nbsp;&nbsp;<br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;uniqueSingleton<br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">16</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div>
<br />
&nbsp;&nbsp;&nbsp;&nbsp;3、急切实例化<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_22_173_Open_Image" onclick="this.style.display='none'; Codehighlighter1_22_173_Open_Text.style.display='none'; Codehighlighter1_22_173_Closed_Image.style.display='inline'; Codehighlighter1_22_173_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_22_173_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_22_173_Closed_Text.style.display='none'; Codehighlighter1_22_173_Open_Image.style.display='inline'; Codehighlighter1_22_173_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Singleton</span><span id="Codehighlighter1_22_173_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_22_173_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;<br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;uniqueInstance&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Singleton();<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img id="Codehighlighter1_97_98_Open_Image" onclick="this.style.display='none'; Codehighlighter1_97_98_Open_Text.style.display='none'; Codehighlighter1_97_98_Closed_Image.style.display='inline'; Codehighlighter1_97_98_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_97_98_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_97_98_Closed_Text.style.display='none'; Codehighlighter1_97_98_Open_Image.style.display='inline'; Codehighlighter1_97_98_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Singleton()</span><span id="Codehighlighter1_97_98_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_97_98_Open_Text"><span style="color: #000000">{}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img id="Codehighlighter1_139_170_Open_Image" onclick="this.style.display='none'; Codehighlighter1_139_170_Open_Text.style.display='none'; Codehighlighter1_139_170_Closed_Image.style.display='inline'; Codehighlighter1_139_170_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_139_170_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_139_170_Closed_Text.style.display='none'; Codehighlighter1_139_170_Open_Image.style.display='inline'; Codehighlighter1_139_170_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;Singleton&nbsp;getInstance()</span><span id="Codehighlighter1_139_170_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_170_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;<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;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;uniqueInstance;<br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;}</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/InBlock.gif" align="top" /><br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div>
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;4、用&#8220;双重检查加锁&#8221;，在getInstance( )中减少使用同步<br />
&nbsp;&nbsp;&nbsp;&nbsp;由于没有性能上考虑，所以这个方法似乎杀鸡用了牛刀。另外这个方法还得确定使用的是java5以上的版本。<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 alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.sailor.singleton;<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img id="Codehighlighter1_31_82_Open_Image" onclick="this.style.display='none'; Codehighlighter1_31_82_Open_Text.style.display='none'; Codehighlighter1_31_82_Closed_Image.style.display='inline'; Codehighlighter1_31_82_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_31_82_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_31_82_Closed_Text.style.display='none'; Codehighlighter1_31_82_Open_Image.style.display='inline'; Codehighlighter1_31_82_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_31_82_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_31_82_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;*&nbsp;</span><span style="color: #808080">@author</span><span style="color: #008000">&nbsp;sailor<br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;*&nbsp;Jul&nbsp;23,&nbsp;2008&nbsp;9:46:17&nbsp;AM<br />
</span><span style="color: #008080">&nbsp;6</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;7</span><span style="color: #000000"><img id="Codehighlighter1_107_407_Open_Image" onclick="this.style.display='none'; Codehighlighter1_107_407_Open_Text.style.display='none'; Codehighlighter1_107_407_Closed_Image.style.display='inline'; Codehighlighter1_107_407_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_107_407_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_107_407_Closed_Text.style.display='none'; Codehighlighter1_107_407_Open_Image.style.display='inline'; Codehighlighter1_107_407_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;Singleton&nbsp;</span><span id="Codehighlighter1_107_407_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_107_407_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;8</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;9</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">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">volatile</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;Singleton&nbsp;uniqueInstance;<br />
</span><span style="color: #008080">10</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">11</span><span style="color: #000000"><img id="Codehighlighter1_184_185_Open_Image" onclick="this.style.display='none'; Codehighlighter1_184_185_Open_Text.style.display='none'; Codehighlighter1_184_185_Closed_Image.style.display='inline'; Codehighlighter1_184_185_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_184_185_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_184_185_Closed_Text.style.display='none'; Codehighlighter1_184_185_Open_Image.style.display='inline'; Codehighlighter1_184_185_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">private</span><span style="color: #000000">&nbsp;Singleton()</span><span id="Codehighlighter1_184_185_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_184_185_Open_Text"><span style="color: #000000">{}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">12</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">13</span><span style="color: #000000"><img id="Codehighlighter1_227_405_Open_Image" onclick="this.style.display='none'; Codehighlighter1_227_405_Open_Text.style.display='none'; Codehighlighter1_227_405_Closed_Image.style.display='inline'; Codehighlighter1_227_405_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_227_405_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_227_405_Closed_Text.style.display='none'; Codehighlighter1_227_405_Open_Image.style.display='inline'; Codehighlighter1_227_405_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;Singleton&nbsp;getInstance()</span><span id="Codehighlighter1_227_405_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_227_405_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img id="Codehighlighter1_257_377_Open_Image" onclick="this.style.display='none'; Codehighlighter1_257_377_Open_Text.style.display='none'; Codehighlighter1_257_377_Closed_Image.style.display='inline'; Codehighlighter1_257_377_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_257_377_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_257_377_Closed_Text.style.display='none'; Codehighlighter1_257_377_Open_Image.style.display='inline'; Codehighlighter1_257_377_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(uniqueInstance&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)</span><span id="Codehighlighter1_257_377_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_257_377_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img id="Codehighlighter1_291_373_Open_Image" onclick="this.style.display='none'; Codehighlighter1_291_373_Open_Text.style.display='none'; Codehighlighter1_291_373_Closed_Image.style.display='inline'; Codehighlighter1_291_373_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_291_373_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_291_373_Closed_Text.style.display='none'; Codehighlighter1_291_373_Open_Image.style.display='inline'; Codehighlighter1_291_373_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">synchronized</span><span style="color: #000000">(Singleton.</span><span style="color: #0000ff">class</span><span style="color: #000000">)</span><span id="Codehighlighter1_291_373_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_291_373_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">16</span><span style="color: #000000"><img id="Codehighlighter1_323_368_Open_Image" onclick="this.style.display='none'; Codehighlighter1_323_368_Open_Text.style.display='none'; Codehighlighter1_323_368_Closed_Image.style.display='inline'; Codehighlighter1_323_368_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_323_368_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_323_368_Closed_Text.style.display='none'; Codehighlighter1_323_368_Open_Image.style.display='inline'; Codehighlighter1_323_368_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(uniqueInstance&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)</span><span id="Codehighlighter1_323_368_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_323_368_Open_Text"><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" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uniqueInstance&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Singleton();<br />
</span><span style="color: #008080">18</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</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/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">20</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><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" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;uniqueInstance;<br />
</span><span style="color: #008080">22</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">23</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div>
<img src ="http://www.blogjava.net/sailor/aggbug/216787.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sailor/" target="_blank">sailor</a> 2008-07-23 09:51 <a href="http://www.blogjava.net/sailor/articles/216787.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>模式（四-3）：抽象工厂(Abstract Factory)模式</title><link>http://www.blogjava.net/sailor/articles/216666.html</link><dc:creator>sailor</dc:creator><author>sailor</author><pubDate>Tue, 22 Jul 2008 09:22:00 GMT</pubDate><guid>http://www.blogjava.net/sailor/articles/216666.html</guid><wfw:comment>http://www.blogjava.net/sailor/comments/216666.html</wfw:comment><comments>http://www.blogjava.net/sailor/articles/216666.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sailor/comments/commentRss/216666.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sailor/services/trackbacks/216666.html</trackback:ping><description><![CDATA[<strong>定义<br />
&nbsp;&nbsp;&nbsp;&nbsp;提供一个接口，用于创建相关或相依赖对象的家族，而不需要明确指定具体类。<br />
<br />
原则<br />
&nbsp;&nbsp;&nbsp;&nbsp;依赖抽象，而不要依赖具体类<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
<br />
实用性<br />
<br />
</strong>　　1，一个系统应当不依赖于产品类实例被创立，组成，和表示的细节。这对于所有形态的工厂模式都是重要的。 <br />
<br />
　　2，这个系统的<span style="color: #ff0000">产品有多于一个的产品族</span>。 <br />
<br />
　　3，<span style="color: #ff0000">同属于同一个产品族的产品是设计成在一起使用</span>的。这一约束必须得在系统的设计中体现出来。 <br />
<br />
<strong>角色<br />
<table cellspacing="0" cellpadding="0" width="600" align="center" border="0">
    <tbody>
        <tr>
            <td><img height="261" src="http://www.yesky.com/20011203/jt-2001-12-3-1-abstractfactory.gif" width="527"  alt="" /><br />
            　　　　　　　图1. 抽象工厂模式的类图定义 </td>
        </tr>
    </tbody>
</table>
<p><br />
　　<span style="color: #808080"><span style="font-size: 10pt"><span style="color: #000000">从上图可以看出，简单工厂模式涉及到以下的角色 <br />
<br />
　　　抽象工厂(AbstractFactory)类或接口 <br />
<br />
　　　担任这个角色的是工厂方法模式的核心，它是与应用程序无关的。任何在模式中创立对象的工厂类必须实现这个接口，或继承这个类。 <br />
<br />
　　　实工厂类 (Conrete Factory) <br />
<br />
　　　担任这个角色的是与应用程序紧密相关的，直接在应用程序调用下，创立产品实例的那样一些类。 <br />
<br />
　　　抽象产品 (Abstract Product) <br />
<br />
　　　担任这个角色的类是工厂方法模式所创立的对象的父类，或它们共同拥有的接口。 <br />
<br />
　　　实产品 (Concrete Product) <br />
<br />
　　　担任这个角色的类是工厂方法模式所创立的任何对象所属的类。</span></span> <br />
<br />
</span>实例<br />
<img height="507" src="http://www.yesky.com/20011203/jt-2001-12-3-1-gardens.gif" width="453"  alt="" /></strong></p>
&nbsp;抽象工厂模式应用于小花果园系统中。三种不同的背景颜色可以区分工厂类，蔬菜类(第一产品族)，和水果类的类图(第二产品族)
<img src ="http://www.blogjava.net/sailor/aggbug/216666.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sailor/" target="_blank">sailor</a> 2008-07-22 17:22 <a href="http://www.blogjava.net/sailor/articles/216666.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>模式（四-2）：工厂方法（Factrory Method）模式</title><link>http://www.blogjava.net/sailor/articles/216546.html</link><dc:creator>sailor</dc:creator><author>sailor</author><pubDate>Tue, 22 Jul 2008 02:49:00 GMT</pubDate><guid>http://www.blogjava.net/sailor/articles/216546.html</guid><wfw:comment>http://www.blogjava.net/sailor/comments/216546.html</wfw:comment><comments>http://www.blogjava.net/sailor/articles/216546.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sailor/comments/commentRss/216546.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sailor/services/trackbacks/216546.html</trackback:ping><description><![CDATA[<p><strong>定义</strong><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;定义了一个创建对象的接口，但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。<br />
<br />
</p>
<strong>原则</strong><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<strong>依赖抽象，不依赖具体实现（依赖倒装）<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;工厂方法使用继承，把对象的创建委托给子类，子类实现工厂方法来创建对象。这个原则说明了不能让高层组件依赖底层组件，而且，高层组件和底层组件都应该依赖于抽象。<br />
<br />
<strong>角色</strong><br />
<br />
<img title="工厂方法类图(图片来源见工参考文献1)" height="255" alt="工厂方法类图" src="http://www.blogjava.net/images/blogjava_net/flying/factorymethod.gif" width="487" align="center" border="0" /><br />
从上图可以看出，工厂方法模式涉及到以下的角色<br />
<strong><br />
抽象工厂接口(Creator)</strong>&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; 担任这个角色的是工厂方法的核心，它是与应用程序无关，创建的工厂类必须实现该接口。<br />
<strong>实工厂类 (Conrete Creator)<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp; 担任这个角色的是与应用程序紧密相关的，直接在程序的调用下创建具体的产品。<br />
<strong>产品 (Product) </strong><br />
&nbsp;&nbsp;&nbsp;&nbsp; 担任这个角色的是工厂方法模式所创建对象的父类，或者是必须实现的接口。<br />
<strong>实产品 (Concrete Product)</strong><br />
&nbsp;&nbsp; 担任这个角色的是工厂方法模式所创建对象所属的类。<br />
<br />
&nbsp;&nbsp; &nbsp;工厂方法模式和简单工厂模式在定义上的不同是很明显的。工厂方法模式的核心是一个抽象工厂类,而不像简单工厂模式, 把核心放在一个实类上。工厂方法模式可以允许很多实的工厂类从抽象工厂类继承下来, 从而可以在实际上成为多个简单工厂模式的综合,从而推广了简单工厂模式。<br />
&nbsp;&nbsp;&nbsp; 反过来讲,简单工厂模式是由工厂方法模式退化而来。设想如果我们非常确定一个系统只需要一个实的工厂类, 那么就不妨把抽象工厂类合并到实的工厂类中去。而这样一来,我们就退化到简单工厂模式了。 <br />
&nbsp;&nbsp; 工厂方法模式又叫多形性工厂模式，显然是因为实工厂类都有共同的接口，或者都有共同的抽象父类。<br />
<br />
<strong>实例：(略)<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;<br />
参考资料：《First Head 设计模式》<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;《<a id="viewpost1_TitleUrl" href="http://www.blogjava.net/flying/archive/2006/07/12/57731.html">菜鸟学设计模式-------工厂方法(Factory Method)模式 </a>》<br />
<br />
<br />
<img src ="http://www.blogjava.net/sailor/aggbug/216546.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sailor/" target="_blank">sailor</a> 2008-07-22 10:49 <a href="http://www.blogjava.net/sailor/articles/216546.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>模式目录</title><link>http://www.blogjava.net/sailor/articles/216544.html</link><dc:creator>sailor</dc:creator><author>sailor</author><pubDate>Tue, 22 Jul 2008 02:47:00 GMT</pubDate><guid>http://www.blogjava.net/sailor/articles/216544.html</guid><wfw:comment>http://www.blogjava.net/sailor/comments/216544.html</wfw:comment><comments>http://www.blogjava.net/sailor/articles/216544.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sailor/comments/commentRss/216544.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sailor/services/trackbacks/216544.html</trackback:ping><description><![CDATA[<a class="singleposttitle" id="viewpost1_TitleUrl" href="http://www.blogjava.net/sailor/articles/216027.html">模式（一）：策略（Strategy）模式</a> <br />
<br />
<a class="singleposttitle" id="viewpost1_TitleUrl" href="http://www.blogjava.net/sailor/articles/216030.html">模式（二）：观察者（Observer）模式</a> <br />
<br />
<a id="homepage1_HomePageDays_DaysList_ctl01_DayItem_DayList_ctl00_TitleUrl" href="http://www.blogjava.net/sailor/articles/216326.html">模式（三）：装饰者（Decorator）模式</a><br />
<br />
<a id="homepage1_HomePageDays_DaysList_ctl00_DayItem_DayList_ctl00_TitleUrl" href="http://www.blogjava.net/sailor/articles/216538.html">模式（四-1）：简单(Simple Factory)工厂模式</a> <br />
<br />
<a id="homepage1_HomePageDays_DaysList_ctl01_DayItem_DayList_ctl01_TitleUrl" href="http://www.blogjava.net/sailor/articles/216546.html">模式（四-2）：工厂方法（Factrory Method）模式</a><br />
<br />
<a id="homepage1_HomePageDays_DaysList_ctl01_DayItem_DayList_ctl00_TitleUrl" href="http://www.blogjava.net/sailor/articles/216666.html">模式（四-3）：抽象工厂(Abstract Factory)模式</a><br />
<br />
<a id="homepage1_HomePageDays_DaysList_ctl00_DayItem_DayList_ctl00_TitleUrl" href="http://www.blogjava.net/sailor/articles/216787.html">模式（五）：单件（singleton）模式</a> <br />
<br />
<a class="titlelink" id="Editor_Results_rprSelectionList_ctl06_Hyperlink1" href="http://www.blogjava.net/sailor/articles/217246.html">模式（六）：命令（Command）模式</a> <br />
<br />
<a class="titlelink" id="Editor_Results_rprSelectionList_ctl02_Hyperlink1" href="http://www.blogjava.net/sailor/articles/217347.html">模式（七）：适配器（Adapter）模式</a> <br />
<br />
<a class="titlelink" id="Editor_Results_rprSelectionList_ctl01_LinkTitle" href="http://www.blogjava.net/sailor/articles/217379.html">模式（八）：外观（Facade）模式</a> <br />
<br />
<a id="homepage1_HomePageDays_DaysList_ctl00_DayItem_DayList_ctl00_TitleUrl" href="http://www.blogjava.net/sailor/articles/217607.html">模式（九）：模板方法（Template Method）模式</a>
<img src ="http://www.blogjava.net/sailor/aggbug/216544.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sailor/" target="_blank">sailor</a> 2008-07-22 10:47 <a href="http://www.blogjava.net/sailor/articles/216544.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>模式（四-1）：简单工厂（Simple Factory）模式</title><link>http://www.blogjava.net/sailor/articles/216538.html</link><dc:creator>sailor</dc:creator><author>sailor</author><pubDate>Tue, 22 Jul 2008 02:03:00 GMT</pubDate><guid>http://www.blogjava.net/sailor/articles/216538.html</guid><wfw:comment>http://www.blogjava.net/sailor/comments/216538.html</wfw:comment><comments>http://www.blogjava.net/sailor/articles/216538.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sailor/comments/commentRss/216538.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sailor/services/trackbacks/216538.html</trackback:ping><description><![CDATA[工厂模式是专门负责将大量有共同接口的类实例化,而且不必事先知道每次是要实例化哪一个类的模式。<br />
<br />
<strong>一、工厂模式有三种形态</strong>&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;简单工厂(Simple Factory)模式 ，又称静态工厂模式<br />
　工厂方法(Factory Method)模式,又称多形性工厂(Polymorphic Factory)模式 <br />
　抽象工厂(Abstract Factory)模式,又称工具箱(Kit或Toolkit)模式&nbsp;<br />
<br />
<h4 id="subjcns!924aeffdc9f1325f!135" style="margin-bottom: 0px">二、简单工厂模式</h4>
<p style="margin-bottom: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 《Head First 设计模式》认为它不是一个设计模式，更像一种编程习惯，优点是可以将客户端程序从具体类中解耦，不失为一个简单的方法。<br />
<br />
<strong>1、定义<br />
&nbsp;&nbsp;&nbsp;&nbsp;</strong>简单工厂模式是由一个工厂对象决定创建出那一种产品类的实例，它是由一个工厂类根据传入的参量决定创建出哪一种产品类的实例。 <br />
<br />
<strong>2、角色</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;简单工厂模式涉及到工厂角色、抽象角色以及具体产品角色等<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;工厂类（Creator）角色：担任这个角色的是工厂方法模式的核心，含有与应用紧密相关的商业逻辑。工厂类在客户端的直接调用下创建产品对象，它往往由一个具体的JAVA类实现。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;抽象产品（Product）角色：担任这个角色的类是工厂方法模式所创建的对象的父类，或他们共同拥有的接口。抽象产品角色可以用一个java接口或者Java抽象类实现。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;具体产品（Concrete Product）角色：工厂方法模式所创建的任何对象是这个角色的实例，具体产品角色由一个具体java类实现。<br />
<br />
<strong>3、实例<br />
<br />
<div align="center"><img style="width: 558px; height: 351px" height="351" alt="" src="C:\simpleFactoryUML.bmp" width="558" border="0" /></div>
<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.sailor.simpleFactory;<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img id="Codehighlighter1_65_200_Open_Image" onclick="this.style.display='none'; Codehighlighter1_65_200_Open_Text.style.display='none'; Codehighlighter1_65_200_Closed_Image.style.display='inline'; Codehighlighter1_65_200_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_65_200_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_65_200_Closed_Text.style.display='none'; Codehighlighter1_65_200_Open_Image.style.display='inline'; Codehighlighter1_65_200_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">abstract</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Product&nbsp;</span><span id="Codehighlighter1_65_200_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_65_200_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img id="Codehighlighter1_90_123_Open_Image" onclick="this.style.display='none'; Codehighlighter1_90_123_Open_Text.style.display='none'; Codehighlighter1_90_123_Closed_Image.style.display='inline'; Codehighlighter1_90_123_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_90_123_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_90_123_Closed_Text.style.display='none'; Codehighlighter1_90_123_Open_Image.style.display='inline'; Codehighlighter1_90_123_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;produce()</span><span id="Codehighlighter1_90_123_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_90_123_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">生产产品</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</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;<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;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">abstract</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;category();<br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">11</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">12</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;</span><span style="color: #0000ff">abstract</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;salePrice();<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;<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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
</strong><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_10_Open_Image" onclick="this.style.display='none'; Codehighlighter1_0_10_Open_Text.style.display='none'; Codehighlighter1_0_10_Closed_Image.style.display='inline'; Codehighlighter1_0_10_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_0_10_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_0_10_Closed_Text.style.display='none'; Codehighlighter1_0_10_Open_Image.style.display='inline'; Codehighlighter1_0_10_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span id="Codehighlighter1_0_10_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_10_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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.sailor.simpleFactory;<br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img id="Codehighlighter1_47_107_Open_Image" onclick="this.style.display='none'; Codehighlighter1_47_107_Open_Text.style.display='none'; Codehighlighter1_47_107_Closed_Image.style.display='inline'; Codehighlighter1_47_107_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_47_107_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_47_107_Closed_Text.style.display='none'; Codehighlighter1_47_107_Open_Image.style.display='inline'; Codehighlighter1_47_107_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_47_107_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_47_107_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 src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;*&nbsp;具体产品<br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;*&nbsp;</span><span style="color: #808080">@author</span><span style="color: #008000">&nbsp;sailor<br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;*&nbsp;Jul&nbsp;22,&nbsp;2008&nbsp;10:15:14&nbsp;AM<br />
</span><span style="color: #008080">10</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">11</span><span style="color: #000000"><img id="Codehighlighter1_141_286_Open_Image" onclick="this.style.display='none'; Codehighlighter1_141_286_Open_Text.style.display='none'; Codehighlighter1_141_286_Closed_Image.style.display='inline'; Codehighlighter1_141_286_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_141_286_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_141_286_Closed_Text.style.display='none'; Codehighlighter1_141_286_Open_Image.style.display='inline'; Codehighlighter1_141_286_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;Car&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;Product</span><span id="Codehighlighter1_141_286_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_141_286_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><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;@Override<br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img id="Codehighlighter1_179_213_Open_Image" onclick="this.style.display='none'; Codehighlighter1_179_213_Open_Text.style.display='none'; Codehighlighter1_179_213_Closed_Image.style.display='inline'; Codehighlighter1_179_213_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_179_213_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_179_213_Closed_Text.style.display='none'; Codehighlighter1_179_213_Open_Image.style.display='inline'; Codehighlighter1_179_213_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;category()&nbsp;</span><span id="Codehighlighter1_179_213_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_179_213_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">15</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">生产小汽车</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">16</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">17</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><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;@Override<br />
</span><span style="color: #008080">19</span><span style="color: #000000"><img id="Codehighlighter1_251_283_Open_Image" onclick="this.style.display='none'; Codehighlighter1_251_283_Open_Text.style.display='none'; Codehighlighter1_251_283_Closed_Image.style.display='inline'; Codehighlighter1_251_283_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_251_283_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_251_283_Closed_Text.style.display='none'; Codehighlighter1_251_283_Open_Image.style.display='inline'; Codehighlighter1_251_283_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;salePrice()&nbsp;</span><span id="Codehighlighter1_251_283_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_251_283_Open_Text"><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="" />&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;Integer(</span><span style="color: #000000">10000</span><span style="color: #000000">);<br />
</span><span style="color: #008080">21</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">22</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">23</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">24</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<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 src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.sailor.simpleFactory;<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img id="Codehighlighter1_35_95_Open_Image" onclick="this.style.display='none'; Codehighlighter1_35_95_Open_Text.style.display='none'; Codehighlighter1_35_95_Closed_Image.style.display='inline'; Codehighlighter1_35_95_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_35_95_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_35_95_Closed_Text.style.display='none'; Codehighlighter1_35_95_Open_Image.style.display='inline'; Codehighlighter1_35_95_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_35_95_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_35_95_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;*&nbsp;具体产品<br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;*&nbsp;</span><span style="color: #808080">@author</span><span style="color: #008000">&nbsp;sailor<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;Jul&nbsp;22,&nbsp;2008&nbsp;10:17:12&nbsp;AM<br />
</span><span style="color: #008080">&nbsp;7</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;8</span><span style="color: #000000"><img id="Codehighlighter1_131_262_Open_Image" onclick="this.style.display='none'; Codehighlighter1_131_262_Open_Text.style.display='none'; Codehighlighter1_131_262_Closed_Image.style.display='inline'; Codehighlighter1_131_262_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_131_262_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_131_262_Closed_Text.style.display='none'; Codehighlighter1_131_262_Open_Image.style.display='inline'; Codehighlighter1_131_262_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;Pizza&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;Product</span><span id="Codehighlighter1_131_262_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_131_262_Open_Text"><span style="color: #000000">{<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="" /><br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img id="Codehighlighter1_169_205_Open_Image" onclick="this.style.display='none'; Codehighlighter1_169_205_Open_Text.style.display='none'; Codehighlighter1_169_205_Closed_Image.style.display='inline'; Codehighlighter1_169_205_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_169_205_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_169_205_Closed_Text.style.display='none'; Codehighlighter1_169_205_Open_Image.style.display='inline'; Codehighlighter1_169_205_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;category()&nbsp;</span><span id="Codehighlighter1_169_205_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_169_205_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">12</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">生产Pizza</span><span style="color: #000000">"</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/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
</span><span style="color: #008080">16</span><span style="color: #000000"><img id="Codehighlighter1_243_259_Open_Image" onclick="this.style.display='none'; Codehighlighter1_243_259_Open_Text.style.display='none'; Codehighlighter1_243_259_Closed_Image.style.display='inline'; Codehighlighter1_243_259_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_243_259_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_243_259_Closed_Text.style.display='none'; Codehighlighter1_243_259_Open_Image.style.display='inline'; Codehighlighter1_243_259_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;salePrice()&nbsp;</span><span id="Codehighlighter1_243_259_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_243_259_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">17</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: #000000">20</span><span style="color: #000000">;<br />
</span><span style="color: #008080">18</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">19</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">20</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
<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_58_Open_Image" onclick="this.style.display='none'; Codehighlighter1_0_58_Open_Text.style.display='none'; Codehighlighter1_0_58_Closed_Image.style.display='inline'; Codehighlighter1_0_58_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_0_58_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_0_58_Closed_Text.style.display='none'; Codehighlighter1_0_58_Open_Image.style.display='inline'; Codehighlighter1_0_58_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span id="Codehighlighter1_0_58_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_58_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/InBlock.gif" align="top"  alt="" />&nbsp;*&nbsp;</span><span style="color: #808080">@author</span><span style="color: #008000">&nbsp;sailor<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;*&nbsp;Jul&nbsp;22,&nbsp;2008&nbsp;10:13:23&nbsp;AM<br />
</span><span style="color: #008080">&nbsp;5</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;6</span><span style="color: #000000"><img id="Codehighlighter1_87_277_Open_Image" onclick="this.style.display='none'; Codehighlighter1_87_277_Open_Text.style.display='none'; Codehighlighter1_87_277_Closed_Image.style.display='inline'; Codehighlighter1_87_277_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_87_277_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_87_277_Closed_Text.style.display='none'; Codehighlighter1_87_277_Open_Image.style.display='inline'; Codehighlighter1_87_277_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;SimpleFactory&nbsp;</span><span id="Codehighlighter1_87_277_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_87_277_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img id="Codehighlighter1_142_275_Open_Image" onclick="this.style.display='none'; Codehighlighter1_142_275_Open_Text.style.display='none'; Codehighlighter1_142_275_Closed_Image.style.display='inline'; Codehighlighter1_142_275_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_142_275_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_142_275_Closed_Text.style.display='none'; Codehighlighter1_142_275_Open_Image.style.display='inline'; Codehighlighter1_142_275_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;Product&nbsp;createProduct(String&nbsp;product)</span><span id="Codehighlighter1_142_275_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_142_275_Open_Text"><span style="color: #000000">{<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;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">"</span><span style="color: #000000">car</span><span style="color: #000000">"</span><span style="color: #000000">.equals(product))<br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Car();<br />
</span><span style="color: #008080">11</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">else</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">"</span><span style="color: #000000">pizza</span><span style="color: #000000">"</span><span style="color: #000000">.equals(product))<br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Pizza();<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;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000"><br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
</span><span style="color: #008080">15</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">16</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.sailor.simpleFactory;<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img id="Codehighlighter1_35_94_Open_Image" onclick="this.style.display='none'; Codehighlighter1_35_94_Open_Text.style.display='none'; Codehighlighter1_35_94_Closed_Image.style.display='inline'; Codehighlighter1_35_94_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_35_94_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_35_94_Closed_Text.style.display='none'; Codehighlighter1_35_94_Open_Image.style.display='inline'; Codehighlighter1_35_94_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_35_94_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_35_94_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;*&nbsp;客户端<br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;*&nbsp;</span><span style="color: #808080">@author</span><span style="color: #008000">&nbsp;sailor<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;Jul&nbsp;22,&nbsp;2008&nbsp;10:20:59&nbsp;AM<br />
</span><span style="color: #008080">&nbsp;7</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;8</span><span style="color: #000000"><img id="Codehighlighter1_116_515_Open_Image" onclick="this.style.display='none'; Codehighlighter1_116_515_Open_Text.style.display='none'; Codehighlighter1_116_515_Closed_Image.style.display='inline'; Codehighlighter1_116_515_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_116_515_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_116_515_Closed_Text.style.display='none'; Codehighlighter1_116_515_Open_Image.style.display='inline'; Codehighlighter1_116_515_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;Client&nbsp;</span><span id="Codehighlighter1_116_515_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_116_515_Open_Text"><span style="color: #000000">{<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="" /><br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img id="Codehighlighter1_120_143_Open_Image" onclick="this.style.display='none'; Codehighlighter1_120_143_Open_Text.style.display='none'; Codehighlighter1_120_143_Closed_Image.style.display='inline'; Codehighlighter1_120_143_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_120_143_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_120_143_Closed_Text.style.display='none'; Codehighlighter1_120_143_Open_Image.style.display='inline'; Codehighlighter1_120_143_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_120_143_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_120_143_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;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;args<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 id="Codehighlighter1_185_513_Open_Image" onclick="this.style.display='none'; Codehighlighter1_185_513_Open_Text.style.display='none'; Codehighlighter1_185_513_Closed_Image.style.display='inline'; Codehighlighter1_185_513_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_185_513_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_185_513_Closed_Text.style.display='none'; Codehighlighter1_185_513_Open_Image.style.display='inline'; Codehighlighter1_185_513_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_185_513_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_185_513_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">14</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">15</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;Product&nbsp;product1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;SimpleFactory.createProduct(</span><span style="color: #000000">"</span><span style="color: #000000">car</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;<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="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;product1.category();<br />
</span><span style="color: #008080">17</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;product1.produce();<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;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">销售额：&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;product1.salePrice());<br />
</span><span style="color: #008080">19</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">20</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">21</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;Product&nbsp;product2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;SimpleFactory.createProduct(</span><span style="color: #000000">"</span><span style="color: #000000">pizza</span><span style="color: #000000">"</span><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;product2.category();<br />
</span><span style="color: #008080">23</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;product2.produce();<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="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">销售额：&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;product2.salePrice());&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">25</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">26</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
 <img src ="http://www.blogjava.net/sailor/aggbug/216538.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sailor/" target="_blank">sailor</a> 2008-07-22 10:03 <a href="http://www.blogjava.net/sailor/articles/216538.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>模式（三）：装饰者（decorator）模式</title><link>http://www.blogjava.net/sailor/articles/216326.html</link><dc:creator>sailor</dc:creator><author>sailor</author><pubDate>Mon, 21 Jul 2008 04:15:00 GMT</pubDate><guid>http://www.blogjava.net/sailor/articles/216326.html</guid><wfw:comment>http://www.blogjava.net/sailor/comments/216326.html</wfw:comment><comments>http://www.blogjava.net/sailor/articles/216326.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sailor/comments/commentRss/216326.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sailor/services/trackbacks/216326.html</trackback:ping><description><![CDATA[<strong>1、定义<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;动态地将责任附加到对象上。若要扩展功能，装饰着提供了比继承者更有弹性的替代方案。<br />
<br />
<strong>2、原则</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;<strong>为交互对象之间的耦合设计而努力<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;<strong>对扩展开放，对修改关闭<br />
</strong><br />
<strong>3、适用环境</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;在不影响其他对象的情况下，以动态、透明的方式给单个对象添加职责。<br />
&nbsp;&nbsp;&nbsp;&nbsp;处理那些可以撤消的职责。<br />
&nbsp;&nbsp;&nbsp;&nbsp;当不能采用生成子类的方法进行扩充时。一种情况是，可能有大量独立的扩展，为支持每一种组合将产生大量的子类，使得子类数目呈爆炸性增长。另一种情况可能是因为类定义被隐藏，或类定义不能用于生成子类。<br />
<br />
<strong>4、本模式中的角色</strong><br />
<p><strong>&nbsp;&nbsp;&nbsp;&nbsp;抽象构件(Component):</strong>给出一个抽象接口，以规范准备接收附加责任的对象。<br />
<strong>&nbsp;&nbsp;&nbsp;&nbsp;具体构件(Concrete Component)：</strong>定义一个接收到附加责任的类。<br />
<strong>&nbsp;&nbsp;&nbsp;&nbsp;装饰（Decorator）:</strong>持有一个构件对象的实例，并定义与抽象构件一致的接口。<br />
<strong>&nbsp;&nbsp;&nbsp;&nbsp;具体装饰（Concrete Decorator）:</strong>负责给构件对象贴上附加的责任。<br />
</p>
<div align="center">
<div align="center"><img height="307" alt="Decorator.jpg" src="http://www.blogjava.net/images/blogjava_net/flying/Decorator.jpg" width="631" border="0" />（图例）<br />
</div>
</div>
<br />
<br />
具体例子：<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"><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;decorator;<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #008000">//</span><span style="color: #008000">抽象构件接口</span><span style="color: #008000"><br />
<img id="Codehighlighter1_54_88_Open_Image" onclick="this.style.display='none'; Codehighlighter1_54_88_Open_Text.style.display='none'; Codehighlighter1_54_88_Closed_Image.style.display='inline'; Codehighlighter1_54_88_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_54_88_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_54_88_Closed_Text.style.display='none'; Codehighlighter1_54_88_Open_Image.style.display='inline'; Codehighlighter1_54_88_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;Component</span><span id="Codehighlighter1_54_88_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_54_88_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.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;sampleOperation();<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div>
<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"><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;decorator;<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #008000">//</span><span style="color: #008000">具体构件-----门</span><span style="color: #008000"><br />
<img id="Codehighlighter1_71_154_Open_Image" onclick="this.style.display='none'; Codehighlighter1_71_154_Open_Text.style.display='none'; Codehighlighter1_71_154_Closed_Image.style.display='inline'; Codehighlighter1_71_154_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_71_154_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_71_154_Closed_Text.style.display='none'; Codehighlighter1_71_154_Open_Image.style.display='inline'; Codehighlighter1_71_154_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;&nbsp;Door&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;Component</span><span id="Codehighlighter1_71_154_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_71_154_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">实现方法</span><span style="color: #008000"><br />
<img id="Codehighlighter1_111_152_Open_Image" onclick="this.style.display='none'; Codehighlighter1_111_152_Open_Text.style.display='none'; Codehighlighter1_111_152_Closed_Image.style.display='inline'; Codehighlighter1_111_152_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_111_152_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_111_152_Closed_Text.style.display='none'; Codehighlighter1_111_152_Open_Image.style.display='inline'; Codehighlighter1_111_152_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;sampleOperation()</span><span id="Codehighlighter1_111_152_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_111_152_Open_Text"><span style="color: #000000">{<br />
<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">build&nbsp;a&nbsp;door</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div>
<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"><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;decorator;<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><br />
<img id="Codehighlighter1_72_276_Open_Image" onclick="this.style.display='none'; Codehighlighter1_72_276_Open_Text.style.display='none'; Codehighlighter1_72_276_Closed_Image.style.display='inline'; Codehighlighter1_72_276_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_72_276_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_72_276_Closed_Text.style.display='none'; Codehighlighter1_72_276_Open_Image.style.display='inline'; Codehighlighter1_72_276_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">abstract</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Decorator&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;Component</span><span id="Codehighlighter1_72_276_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_72_276_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">持有一个构件对象的实例</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Component&nbsp;component;<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">构造方法</span><span style="color: #008000"><br />
<img id="Codehighlighter1_165_196_Open_Image" onclick="this.style.display='none'; Codehighlighter1_165_196_Open_Text.style.display='none'; Codehighlighter1_165_196_Closed_Image.style.display='inline'; Codehighlighter1_165_196_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_165_196_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_165_196_Closed_Text.style.display='none'; Codehighlighter1_165_196_Open_Image.style.display='inline'; Codehighlighter1_165_196_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Decorator(Component&nbsp;component)</span><span id="Codehighlighter1_165_196_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_196_Open_Text"><span style="color: #000000">{<br />
<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">this</span><span style="color: #000000">.component</span><span style="color: #000000">=</span><span style="color: #000000">component;<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">方法的具体实现</span><span style="color: #008000"><br />
<img id="Codehighlighter1_240_274_Open_Image" onclick="this.style.display='none'; Codehighlighter1_240_274_Open_Text.style.display='none'; Codehighlighter1_240_274_Closed_Image.style.display='inline'; Codehighlighter1_240_274_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_240_274_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_240_274_Closed_Text.style.display='none'; Codehighlighter1_240_274_Open_Image.style.display='inline'; Codehighlighter1_240_274_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;sampleOperation()</span><span id="Codehighlighter1_240_274_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_240_274_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;component.sampleOperation();<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div>
<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"><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;decorator;<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #008000">//</span><span style="color: #008000">具体装饰----把手</span><span style="color: #008000"><br />
<img id="Codehighlighter1_67_240_Open_Image" onclick="this.style.display='none'; Codehighlighter1_67_240_Open_Text.style.display='none'; Codehighlighter1_67_240_Closed_Image.style.display='inline'; Codehighlighter1_67_240_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_67_240_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_67_240_Closed_Text.style.display='none'; Codehighlighter1_67_240_Open_Image.style.display='inline'; Codehighlighter1_67_240_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;Knob&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;Decorator</span><span id="Codehighlighter1_67_240_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_67_240_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img id="Codehighlighter1_103_126_Open_Image" onclick="this.style.display='none'; Codehighlighter1_103_126_Open_Text.style.display='none'; Codehighlighter1_103_126_Closed_Image.style.display='inline'; Codehighlighter1_103_126_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_103_126_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_103_126_Closed_Text.style.display='none'; Codehighlighter1_103_126_Open_Image.style.display='inline'; Codehighlighter1_103_126_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;Knob(Component&nbsp;component)</span><span id="Codehighlighter1_103_126_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_103_126_Open_Text"><span style="color: #000000">{<br />
<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">super</span><span style="color: #000000">(component);<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_160_238_Open_Image" onclick="this.style.display='none'; Codehighlighter1_160_238_Open_Text.style.display='none'; Codehighlighter1_160_238_Closed_Image.style.display='inline'; Codehighlighter1_160_238_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_160_238_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_160_238_Closed_Text.style.display='none'; Codehighlighter1_160_238_Open_Image.style.display='inline'; Codehighlighter1_160_238_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;sampleOperation()</span><span id="Codehighlighter1_160_238_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_160_238_Open_Text"><span style="color: #000000">{<br />
<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">super</span><span style="color: #000000">.sampleOperation();<br />
<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: #008000">//</span><span style="color: #008000">附加的"责任"</span><span style="color: #008000"><br />
<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;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">add&nbsp;a&nbsp;knob</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;decorator;<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #008000">//</span><span style="color: #008000">具体装饰----锁</span><span style="color: #008000"><br />
<img id="Codehighlighter1_66_236_Open_Image" onclick="this.style.display='none'; Codehighlighter1_66_236_Open_Text.style.display='none'; Codehighlighter1_66_236_Closed_Image.style.display='inline'; Codehighlighter1_66_236_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_66_236_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_66_236_Closed_Text.style.display='none'; Codehighlighter1_66_236_Open_Image.style.display='inline'; Codehighlighter1_66_236_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;Lock&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;Decorator</span><span id="Codehighlighter1_66_236_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_66_236_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img id="Codehighlighter1_102_125_Open_Image" onclick="this.style.display='none'; Codehighlighter1_102_125_Open_Text.style.display='none'; Codehighlighter1_102_125_Closed_Image.style.display='inline'; Codehighlighter1_102_125_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_102_125_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_102_125_Closed_Text.style.display='none'; Codehighlighter1_102_125_Open_Image.style.display='inline'; Codehighlighter1_102_125_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;Lock(Component&nbsp;component)</span><span id="Codehighlighter1_102_125_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_102_125_Open_Text"><span style="color: #000000">{<br />
<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">super</span><span style="color: #000000">(component);<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_157_234_Open_Image" onclick="this.style.display='none'; Codehighlighter1_157_234_Open_Text.style.display='none'; Codehighlighter1_157_234_Closed_Image.style.display='inline'; Codehighlighter1_157_234_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_157_234_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_157_234_Closed_Text.style.display='none'; Codehighlighter1_157_234_Open_Image.style.display='inline'; Codehighlighter1_157_234_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;sampleOperation()</span><span id="Codehighlighter1_157_234_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_157_234_Open_Text"><span style="color: #000000">{<br />
<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">super</span><span style="color: #000000">.sampleOperation();<br />
<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: #008000">//</span><span style="color: #008000">附加"责任"</span><span style="color: #008000"><br />
<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;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">add&nbsp;a&nbsp;lock</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div>
运行类：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;decorator;<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><br />
<img id="Codehighlighter1_49_216_Open_Image" onclick="this.style.display='none'; Codehighlighter1_49_216_Open_Text.style.display='none'; Codehighlighter1_49_216_Closed_Image.style.display='inline'; Codehighlighter1_49_216_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_49_216_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_49_216_Closed_Text.style.display='none'; Codehighlighter1_49_216_Open_Image.style.display='inline'; Codehighlighter1_49_216_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;DecoratorPattern</span><span id="Codehighlighter1_49_216_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_216_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_90_214_Open_Image" onclick="this.style.display='none'; Codehighlighter1_90_214_Open_Text.style.display='none'; Codehighlighter1_90_214_Closed_Image.style.display='inline'; Codehighlighter1_90_214_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_90_214_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_90_214_Closed_Text.style.display='none'; Codehighlighter1_90_214_Open_Image.style.display='inline'; Codehighlighter1_90_214_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)</span><span id="Codehighlighter1_90_214_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_90_214_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Component&nbsp;door</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Door();<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Component&nbsp;lock</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Lock(door);<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Component&nbsp;knob</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Knob(lock);<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;knob.sampleOperation();<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div>
<br />
运行结果：<br />
<font color="#008000">build a door<br />
add a lock<br />
add a knob<br />
Press any key to continue...<br />
</font><br />
参考资料：《Head First 设计模式》<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a id="viewpost1_TitleUrl" href="http://www.blogjava.net/flying/archive/2006/08/14/63376.html">设计模式学习笔记（十）--------装饰(Decorator)模式</a> 
<img src ="http://www.blogjava.net/sailor/aggbug/216326.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sailor/" target="_blank">sailor</a> 2008-07-21 12:15 <a href="http://www.blogjava.net/sailor/articles/216326.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>模式（二）：观察者（Observer）模式</title><link>http://www.blogjava.net/sailor/articles/216030.html</link><dc:creator>sailor</dc:creator><author>sailor</author><pubDate>Sat, 19 Jul 2008 06:58:00 GMT</pubDate><guid>http://www.blogjava.net/sailor/articles/216030.html</guid><wfw:comment>http://www.blogjava.net/sailor/comments/216030.html</wfw:comment><comments>http://www.blogjava.net/sailor/articles/216030.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sailor/comments/commentRss/216030.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sailor/services/trackbacks/216030.html</trackback:ping><description><![CDATA[1、定义<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;在对象之间定义一对多的依赖，这样一来，当一个对象改变时状态，依赖他的对象会收到通知，并自动更新。这种模式以松耦合方式在一些列对象之间改变状态。MVC模式就是观察者模式的一个代表。<br />
<br />
2、实用性<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;当一个抽象模型有两个方面, 其中一个方面依赖于另一方面。将这二者封装在独立的对象中以使它们可以各自独立地改变和复用。&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;当对一个对象的改变需要同时改变其它对象, 而不知道具体有多少对象有待改变。<br />
&nbsp;&nbsp;&nbsp;&nbsp;当一个对象必须通知其它对象，而它又不能假定其它对象是谁。换言之, 你不希望这些对象是紧密耦合的。<br />
&nbsp;
<p>3、设计原则<br />
<br />
<span style="color: #cc99ff"><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<strong>找出程序中会变化的方面，然后将其和固定不变的方面相分离</strong></span><br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在观察者模式中，会改变的是主题的状态，以及观察者的数目和类型。用这个模式，你可以依赖于主题状态的对象，却不必改变主题。这就叫提前规划。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #000000"><strong>针对接口编程，不针对实现编程</strong></span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;主题与观察者都使用接口：观察者利用主题的接口，向主题注册；而主题利用观察者的接口通知接口。这样可以让两者之间运作正常，又同事具有松耦合的优点。<br />
<br />
<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<strong>多用组合，少用继承</strong></span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;观察者模式利用&#8220;组合&#8221;，将许多观察者组合进主题中。对象之间的这种关系不是通过继承产生的，而是在运行时利用组合的方式而产生的。<br />
&nbsp;<br />
4、实现<br />
&nbsp;&nbsp;&nbsp;<br />
<div align="center"><img style="border-left-color: #000000; border-bottom-color: #000000; border-top-color: #000000; border-right-color: #000000" height="275" alt="" src="E:\Project\模式\obverser\UML.BMP" width="562" border="1" /></div>
<br />
</p>
<img src ="http://www.blogjava.net/sailor/aggbug/216030.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sailor/" target="_blank">sailor</a> 2008-07-19 14:58 <a href="http://www.blogjava.net/sailor/articles/216030.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>模式（一）：策略（Strategy）模式</title><link>http://www.blogjava.net/sailor/articles/216027.html</link><dc:creator>sailor</dc:creator><author>sailor</author><pubDate>Sat, 19 Jul 2008 06:53:00 GMT</pubDate><guid>http://www.blogjava.net/sailor/articles/216027.html</guid><wfw:comment>http://www.blogjava.net/sailor/comments/216027.html</wfw:comment><comments>http://www.blogjava.net/sailor/articles/216027.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sailor/comments/commentRss/216027.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sailor/services/trackbacks/216027.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;定义：定义了算法族，分别封装起来，让他们之间可以相互交换，此模拟算法的变化独立于使用算法的客户。<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;设计原则：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1、多用组合，少用继承；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2、针对接口编程，而不是针对实现编程；<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;实现：<br />
<br />
<img height="204" alt="" src="http://www.cnblogs.com/images/cnblogs_com/justinw/str_8.jpg" width="554" border="0" /><br />
&nbsp;&nbsp;&nbsp;<span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Context(<span>应用场景):</span> </span>
<p style="margin: 0cm 0cm 0pt 42.75pt; text-indent: -21pt"><span style="font-size: 10pt"><span style="color: black; font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="color: black; font-family: 宋体">需要使用</span><span style="color: black">ConcreteStrategy</span><span style="color: black; font-family: 宋体">提供的算法。</span></span></p>
<p style="margin: 0cm 0cm 0pt 42.75pt; text-indent: -21pt"><span style="font-size: 10pt"><span style="color: black; font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="color: black; font-family: 宋体">内部维护一个</span><span style="color: black">Strategy</span><span style="color: black; font-family: 宋体">的实例。</span></span></p>
<p style="margin: 0cm 0cm 0pt 42.75pt; text-indent: -21pt"><span style="font-size: 10pt"><span style="color: black; font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="color: black; font-family: 宋体">负责动态设置运行时</span><span style="color: black">Strategy</span><span style="color: black; font-family: 宋体">具体的实现算法。</span></span></p>
<p style="margin: 0cm 0cm 0pt 42.75pt; text-indent: -21pt"><span style="font-size: 10pt"><span style="color: black; font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="color: black; font-family: 宋体">负责跟</span><span style="color: black">Strategy</span><span style="color: black; font-family: 宋体">之间的交互和数据传递。<br />
</span></span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 10pt"><span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Strategy(抽象策略类)：</span></span></p>
<p style="margin: 0cm 0cm 0pt 42.75pt; text-indent: -21pt"><span style="font-size: 10pt"><span style="color: black; font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="color: black; font-family: 宋体">定义了一个公共接口，各种不同的算法以不同的方式实现这个接口，</span><span style="color: black">Context</span><span style="color: black; font-family: 宋体">使用这个接口调用不同的算法，一般使用接口或抽象类实现。</span></span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 10pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ConcreteStrategy(具体策略类)：</span></span></p>
<p style="margin: 0cm 0cm 0pt 42.75pt; text-indent: -21pt"><span style="font-size: 10pt"><span style="color: black; font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="color: black; font-family: 宋体">实现了</span><span style="color: black">Strategy</span></span><span style="color: black; font-family: 宋体"><span style="font-size: 10pt">定义的接口，提供具体的算法实现。<br />
</span><br />
</span></p>
<hr />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;参考资料：《Head First设计模式》<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 href="http://www.cnblogs.com/justinw/archive/2007/02/06/641414.html">《<span style="font-family: 宋体">鸭子</span><span lang="EN-US">-</span><span style="font-family: 宋体">策略模式（</span><span lang="EN-US">Strategy</span><span style="font-family: 宋体">）</span>》</a> 
 <img src ="http://www.blogjava.net/sailor/aggbug/216027.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sailor/" target="_blank">sailor</a> 2008-07-19 14:53 <a href="http://www.blogjava.net/sailor/articles/216027.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>