﻿<?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-梦幻之旅-随笔分类-Design Patterns</title><link>http://www.blogjava.net/hwpok/category/30969.html</link><description>DEBUG - 天道酬勤</description><language>zh-cn</language><lastBuildDate>Tue, 03 Jun 2014 07:45:17 GMT</lastBuildDate><pubDate>Tue, 03 Jun 2014 07:45:17 GMT</pubDate><ttl>60</ttl><item><title>[原创]设计模型探索S-GoF,设计模式的分类</title><link>http://www.blogjava.net/hwpok/archive/2011/08/03/355696.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Wed, 03 Aug 2011 09:49:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2011/08/03/355696.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/355696.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2011/08/03/355696.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/355696.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/355696.html</trackback:ping><description><![CDATA[<div>1.<br />&nbsp;&nbsp;&nbsp; 到这，已经学习绝大部份设计模式了。<br />&nbsp;&nbsp;&nbsp; 别人根你提起GoF,你说你不知道他们是谁，那你就闹笑话了。<br />&nbsp;&nbsp;&nbsp; GoF是指&nbsp; Gang of Four, 译成中文就是&#8220;四人组&#8221;或&#8220;四人帮&#8221;.他们四个人合著了<span class="st">《设计模式<span class="st">》</span></span>。<br />&nbsp;&nbsp;&nbsp; 1).Erich Gamma 埃里希.伽马<br />&nbsp;&nbsp;&nbsp;&nbsp;2).Richard Helm 理查德.赫蒙<br />&nbsp;&nbsp;&nbsp; 3).Ralph Johnson 拉尔夫.约翰逊<br />&nbsp;&nbsp;&nbsp; 4).John vissdes 约翰.威斯德斯<br />
<div class="article-rel-wrapper">
<h2 class="contentheading">The Gang of Four </h2></div>
<p>Why are we, <strong>Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides</strong>, called this? Who knows. Somehow the name just stuck. Hopefully like, the original Gang of Four, we have started a small cultural change with "<em>Design Patterns...</em>" And hopefully unlike the original Gang of Four we will not meet such an untimely end for our ("<em>counter-revolutionary</em>"?) ideas. </p>
<hr color="#5e925d" size="1" />

<p><strong>Erich Gamma</strong> is currently with a consulting group in Zurich whose name I (Ralph) can't recall. From 1993 to 1995, he was a software engineer at <a href="http://www.taligent.com/"><strong>Taligent</strong></a> working on their object-oriented development environment. Erich was previously at <a href="http://www.ubs.com/ubilab/index.html"><strong>UBILAB</strong></a> research laboratory of Union Bank of Switzerland. He was one of the architects of ET++, a portable C++ class library for developing interactive graphical applications. Erich has a Ph.D. in Computer Science from University of Zurich. </p>
<p><strong>Richard Helm</strong> recently rejoined IBM to start the Australian branch of the Object Technology Practice. Prior to that, he was a technology consultant with <strong>DMR Group</strong>, an international information technology consulting firm. There he actively applied design patterns to the design of commercial systems. Prior to DMR, Richard was in the <a href="http://www.research.ibm.com/xw-SoftwareTechnology">Software Technology</a> department at <a href="http://www.research.ibm.com/"><strong>IBM T.J. Watson Research Center</strong></a> investigating object-oriented design and reuse and <a href="http://www.almaden.ibm.com/watson/pv/pv.html">visualization</a>. Richard has numerous international publications, writes regularly in <a href="http://www.ddj.com/"><strong>Dr. Dobb's Journal</strong></a>, and is a past OOPSLA program committee member. Richard has a Ph.D. in Computer Science from the <a href="http://www.unimelb.edu.au/">University of Melbourne</a>, Australia. </p>
<p><a href="http://st-www.cs.uiuc.edu/users/johnson/RalphJohnson.html"><strong>Ralph Johnson</strong></a> has been studying object-oriented technology and how it changes the way that software is developed for the past 10 years. He has been involved in the development of an object-oriented operating system (Choices), compiler (Typed Smalltalk), graphics editor framework (HotDraw), music synthesis system (Kyma), and is currently working on a framework for accounting. He is on the faculty of the <a href="http://www.cs.uiuc.edu/"><strong>Department of Computer Science</strong></a> at the <strong>University of Illinois</strong> and has helped organize several OOPSLA's, including OOPSLA'93 as program chair. He got his PhD from Cornell. </p>
<p><strong>John Vlissides</strong> passed away November 24th, 2005. He was a researcher at the <a href="http://www.research.ibm.com/"><strong>IBM T.J. Watson Research Center</strong></a>. His research interests included object-oriented design tools and techniques, application frameworks and builders, and program <a href="http://www.almaden.ibm.com/watson/pv/pv.html">visualization</a>. Before IBM, John was at the Computer Systems Laboratory at Stanford University. There he co-developed InterViews, a popular object-oriented s</p><br />2.设模式的分类<br />&nbsp;&nbsp; 1).构造型模式<br />&nbsp;&nbsp; 2).行为型模式<br />&nbsp;&nbsp; 3).结构型模式<br /><br /></div><img src ="http://www.blogjava.net/hwpok/aggbug/355696.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2011-08-03 17:49 <a href="http://www.blogjava.net/hwpok/archive/2011/08/03/355696.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]设计模型探索R-mediator parttern之月下老人</title><link>http://www.blogjava.net/hwpok/archive/2011/08/03/355692.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Wed, 03 Aug 2011 09:04:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2011/08/03/355692.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/355692.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2011/08/03/355692.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/355692.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/355692.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 用一个中介对象来封装一系统的对象交互。中介者使各对象不需要显示地相互引用，从而使其耦合松散，而可以独立改变他们之间的效死.组成部份：1.中介者2.具体中介者3.同事4.具体同事组成部份之间的关系：例子：1.人Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com...&nbsp;&nbsp;<a href='http://www.blogjava.net/hwpok/archive/2011/08/03/355692.html'>阅读全文</a><img src ="http://www.blogjava.net/hwpok/aggbug/355692.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2011-08-03 17:04 <a href="http://www.blogjava.net/hwpok/archive/2011/08/03/355692.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]设计模型探索Q-bridge parttern之桥归桥路归路 </title><link>http://www.blogjava.net/hwpok/archive/2011/08/03/355676.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Wed, 03 Aug 2011 07:26:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2011/08/03/355676.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/355676.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2011/08/03/355676.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/355676.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/355676.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 桥接模式&nbsp;&nbsp;&nbsp; 将抽象部份与它的实现部份分离，使它们都可独立地变化。&nbsp;&nbsp;&nbsp; 桥接模式是最复杂的模式之一，它把事物对象和其具体行为、具体特征分离开来，使它们可以各自独立的变化。事物对象仅是一个抽象的概念。如&#8220;圆形&#8221;、&#8220;三角形&#8221;归于抽象的&#8220;形状&#8221;之下，而&#8220;画圆...&nbsp;&nbsp;<a href='http://www.blogjava.net/hwpok/archive/2011/08/03/355676.html'>阅读全文</a><img src ="http://www.blogjava.net/hwpok/aggbug/355676.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2011-08-03 15:26 <a href="http://www.blogjava.net/hwpok/archive/2011/08/03/355676.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]设计模型探索P-template method parttern之死模活样</title><link>http://www.blogjava.net/hwpok/archive/2011/08/02/355608.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Tue, 02 Aug 2011 09:28:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2011/08/02/355608.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/355608.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2011/08/02/355608.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/355608.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/355608.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 模板方法&nbsp;&nbsp;&nbsp; 定义一个操作算法的骨架,而将一些步骤沿迟到子类中去实现,模板方法使了类可能不改变算法的结构即可以重定义该算法的某一些特定步骤.组成部份&nbsp;&nbsp; 1.抽象模板 是一个抽象类,包含一系列的算法和一个模板方法,模板方法需要加final来修饰.&nbsp;&nbsp;&nbsp;2.具体模板 继承自抽象类.各组成部份之间的关系适用场景:设计者需...&nbsp;&nbsp;<a href='http://www.blogjava.net/hwpok/archive/2011/08/02/355608.html'>阅读全文</a><img src ="http://www.blogjava.net/hwpok/aggbug/355608.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2011-08-02 17:28 <a href="http://www.blogjava.net/hwpok/archive/2011/08/02/355608.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]设计模型探索O2-proxy parttern之桃代李疆 </title><link>http://www.blogjava.net/hwpok/archive/2011/08/02/355602.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Tue, 02 Aug 2011 08:12:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2011/08/02/355602.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/355602.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2011/08/02/355602.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/355602.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/355602.html</trackback:ping><description><![CDATA[<div>jdk代理:<br />1.抽象主题
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;dynamicProxy;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img id="Codehighlighter1_23_299_Open_Image" onclick="this.style.display='none'; Codehighlighter1_23_299_Open_Text.style.display='none'; Codehighlighter1_23_299_Closed_Image.style.display='inline'; Codehighlighter1_23_299_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_23_299_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_23_299_Closed_Text.style.display='none'; Codehighlighter1_23_299_Open_Image.style.display='inline'; Codehighlighter1_23_299_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_23_299_Closed_Text">/**&nbsp;*/</span><span id="Codehighlighter1_23_299_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;ul&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;li&gt;Title:[SellWine]&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;li&gt;Description:&nbsp;[卖酒接口]&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;li&gt;Copyright&nbsp;2009&nbsp;Upengs&nbsp;Co.,&nbsp;Ltd.&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;li&gt;All&nbsp;right&nbsp;reserved.&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;li&gt;Created&nbsp;by&nbsp;[Huyvanpull]&nbsp;[2011-8-2]&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;li&gt;Midified&nbsp;by&nbsp;[modifier]&nbsp;[modified&nbsp;time]&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;/ul&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;</span><span style="color: #808080">@version</span><span style="color: #008000">&nbsp;1.0&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  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;SellWine<br /><img id="Codehighlighter1_327_356_Open_Image" onclick="this.style.display='none'; Codehighlighter1_327_356_Open_Text.style.display='none'; Codehighlighter1_327_356_Closed_Image.style.display='inline'; Codehighlighter1_327_356_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_327_356_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_327_356_Closed_Text.style.display='none'; Codehighlighter1_327_356_Open_Image.style.display='inline'; Codehighlighter1_327_356_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_327_356_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_327_356_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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;sell();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div><br /><br />2.具体主题<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;dynamicProxy;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img id="Codehighlighter1_23_328_Open_Image" onclick="this.style.display='none'; Codehighlighter1_23_328_Open_Text.style.display='none'; Codehighlighter1_23_328_Closed_Image.style.display='inline'; Codehighlighter1_23_328_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_23_328_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_23_328_Closed_Text.style.display='none'; Codehighlighter1_23_328_Open_Image.style.display='inline'; Codehighlighter1_23_328_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_23_328_Closed_Text">/**&nbsp;*/</span><span id="Codehighlighter1_23_328_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;ul&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;li&gt;Title:[WineFactory]&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;li&gt;Description:&nbsp;[type&nbsp;of&nbsp;functional&nbsp;description]&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;li&gt;Copyright&nbsp;2009&nbsp;Upengs&nbsp;Co.,&nbsp;Ltd.&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;li&gt;All&nbsp;right&nbsp;reserved.&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;li&gt;Created&nbsp;by&nbsp;[Huyvanpull]&nbsp;[2011-8-2]&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;li&gt;Midified&nbsp;by&nbsp;[modifier]&nbsp;[modified&nbsp;time]&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;/ul&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;</span><span style="color: #808080">@version</span><span style="color: #008000">&nbsp;1.0&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  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;WineFactory&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;SellWine<br /><img id="Codehighlighter1_375_526_Open_Image" onclick="this.style.display='none'; Codehighlighter1_375_526_Open_Text.style.display='none'; Codehighlighter1_375_526_Closed_Image.style.display='inline'; Codehighlighter1_375_526_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_375_526_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_375_526_Closed_Text.style.display='none'; Codehighlighter1_375_526_Open_Image.style.display='inline'; Codehighlighter1_375_526_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_375_526_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_375_526_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img id="Codehighlighter1_382_439_Open_Image" onclick="this.style.display='none'; Codehighlighter1_382_439_Open_Text.style.display='none'; Codehighlighter1_382_439_Closed_Image.style.display='inline'; Codehighlighter1_382_439_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_382_439_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_382_439_Closed_Text.style.display='none'; Codehighlighter1_382_439_Open_Image.style.display='inline'; Codehighlighter1_382_439_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_382_439_Closed_Text">/**/</span><span id="Codehighlighter1_382_439_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000">&nbsp;(non-Javadoc)<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@see&nbsp;proxy.SellWine#sell()<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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;sell()<br /><img id="Codehighlighter1_468_520_Open_Image" onclick="this.style.display='none'; Codehighlighter1_468_520_Open_Text.style.display='none'; Codehighlighter1_468_520_Closed_Image.style.display='inline'; Codehighlighter1_468_520_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_468_520_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_468_520_Closed_Text.style.display='none'; Codehighlighter1_468_520_Open_Image.style.display='inline'; Codehighlighter1_468_520_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_468_520_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_468_520_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">wineFactory卖酒.</span><span style="color: #000000">"</span><span style="color: #000000">);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div><br />3.代理类<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;dynamicProxy;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.lang.reflect.InvocationHandler;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.lang.reflect.Method;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  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;DynamicProxy&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;InvocationHandler<br /><img id="Codehighlighter1_156_685_Open_Image" onclick="this.style.display='none'; Codehighlighter1_156_685_Open_Text.style.display='none'; Codehighlighter1_156_685_Closed_Image.style.display='inline'; Codehighlighter1_156_685_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_156_685_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_156_685_Closed_Text.style.display='none'; Codehighlighter1_156_685_Open_Image.style.display='inline'; Codehighlighter1_156_685_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_156_685_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_156_685_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Object&nbsp;target;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;DynamicProxy(Object&nbsp;realSubject)<br /><img id="Codehighlighter1_238_274_Open_Image" onclick="this.style.display='none'; Codehighlighter1_238_274_Open_Text.style.display='none'; Codehighlighter1_238_274_Closed_Image.style.display='inline'; Codehighlighter1_238_274_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_238_274_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_238_274_Closed_Text.style.display='none'; Codehighlighter1_238_274_Open_Image.style.display='inline'; Codehighlighter1_238_274_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_238_274_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_238_274_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;target&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;realSubject;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Object&nbsp;invoke(Object&nbsp;proxy,&nbsp;Method&nbsp;method,&nbsp;Object[]&nbsp;args)<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;Throwable<br /><img id="Codehighlighter1_383_679_Open_Image" onclick="this.style.display='none'; Codehighlighter1_383_679_Open_Text.style.display='none'; Codehighlighter1_383_679_Closed_Image.style.display='inline'; Codehighlighter1_383_679_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_383_679_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_383_679_Closed_Text.style.display='none'; Codehighlighter1_383_679_Open_Image.style.display='inline'; Codehighlighter1_383_679_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_383_679_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_383_679_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;proxyObj&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000"><br /><img id="Codehighlighter1_437_566_Open_Image" onclick="this.style.display='none'; Codehighlighter1_437_566_Open_Text.style.display='none'; Codehighlighter1_437_566_Closed_Image.style.display='inline'; Codehighlighter1_437_566_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_437_566_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_437_566_Closed_Text.style.display='none'; Codehighlighter1_437_566_Open_Image.style.display='inline'; Codehighlighter1_437_566_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_437_566_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_437_566_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&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 /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;method.invoke(target,&nbsp;args);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&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 /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">(Exception&nbsp;ex)<br /><img id="Codehighlighter1_604_648_Open_Image" onclick="this.style.display='none'; Codehighlighter1_604_648_Open_Text.style.display='none'; Codehighlighter1_604_648_Closed_Image.style.display='inline'; Codehighlighter1_604_648_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_604_648_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_604_648_Closed_Text.style.display='none'; Codehighlighter1_604_648_Open_Image.style.display='inline'; Codehighlighter1_604_648_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_604_648_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_604_648_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ex.printStackTrace();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;proxyObj;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div><br />4.测试类<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;dynamicProxy;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.lang.reflect.Proxy;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  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;Test<br /><img id="Codehighlighter1_74_505_Open_Image" onclick="this.style.display='none'; Codehighlighter1_74_505_Open_Text.style.display='none'; Codehighlighter1_74_505_Closed_Image.style.display='inline'; Codehighlighter1_74_505_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_74_505_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_74_505_Closed_Text.style.display='none'; Codehighlighter1_74_505_Open_Image.style.display='inline'; Codehighlighter1_74_505_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_74_505_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_74_505_Open_Text"><span style="color: #000000">{<br /><img id="Codehighlighter1_80_133_Open_Image" onclick="this.style.display='none'; Codehighlighter1_80_133_Open_Text.style.display='none'; Codehighlighter1_80_133_Closed_Image.style.display='inline'; Codehighlighter1_80_133_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_80_133_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_80_133_Closed_Text.style.display='none'; Codehighlighter1_80_133_Open_Image.style.display='inline'; Codehighlighter1_80_133_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_80_133_Closed_Text">/**&nbsp;*/</span><span id="Codehighlighter1_80_133_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;代理模式中的调用<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;args<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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)<br /><img id="Codehighlighter1_182_503_Open_Image" onclick="this.style.display='none'; Codehighlighter1_182_503_Open_Text.style.display='none'; Codehighlighter1_182_503_Closed_Image.style.display='inline'; Codehighlighter1_182_503_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_182_503_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_182_503_Closed_Text.style.display='none'; Codehighlighter1_182_503_Open_Image.style.display='inline'; Codehighlighter1_182_503_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_182_503_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_182_503_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SellWine&nbsp;sellWine&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;WineFactory();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DynamicProxy&nbsp;dynamicProxy&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;DynamicProxy(sellWine);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sellWine&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(SellWine)&nbsp;Proxy<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.newProxyInstance(sellWine.getClass().getClassLoader(),<br /><img id="Codehighlighter1_439_456_Open_Image" onclick="this.style.display='none'; Codehighlighter1_439_456_Open_Text.style.display='none'; Codehighlighter1_439_456_Closed_Image.style.display='inline'; Codehighlighter1_439_456_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_439_456_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_439_456_Closed_Text.style.display='none'; Codehighlighter1_439_456_Open_Image.style.display='inline'; Codehighlighter1_439_456_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Class[]&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_439_456_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_439_456_Open_Text"><span style="color: #000000">{&nbsp;SellWine.</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;}</span></span><span style="color: #000000">,&nbsp;dynamicProxy);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sellWine.sell();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div><br />动态代理能代理不同的接口.</div><img src ="http://www.blogjava.net/hwpok/aggbug/355602.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2011-08-02 16:12 <a href="http://www.blogjava.net/hwpok/archive/2011/08/02/355602.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]设计模型探索O1-proxy parttern之桃代李疆 </title><link>http://www.blogjava.net/hwpok/archive/2011/08/02/355596.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Tue, 02 Aug 2011 07:36:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2011/08/02/355596.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/355596.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2011/08/02/355596.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/355596.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/355596.html</trackback:ping><description><![CDATA[<div>代理模式<br />&nbsp;&nbsp;&nbsp; 为其它的对象提供一种代理,以控制对这个对象的访问.<br />&nbsp;&nbsp;&nbsp; &nbsp;Proxy<span style="font-family: 宋体">代理模式是一种结构型设计模式，主要解决的问题是：在直接访问对象时带来的问题，比如说：要访问的对象在远程的机器上。在面向对象系统中，有些对象由于某些原因（比如对象创建开销很大，或者某些操作需要安全控制，或者需要进程外的访问），直接访问会给使用者或者系统结构带来很多麻烦，我们可以在访问此对象时加上一个对此对象的访问层。<br /></span>代理模式的组成部份:<br />&nbsp;&nbsp;&nbsp; 1.抽象主题 是一个接口.<br />&nbsp;&nbsp;&nbsp; 2.具体主题&nbsp; 要实现抽象主题接口<br />&nbsp;&nbsp;&nbsp; 3.代理主题 要实现抽象主题接口,含有一个主题接口声明的变量<br />各组成部份之间的关系:<br /><img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/hwpok/proxy.jpg" width="412" height="269" /><br />例子:<br />1.接口<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;proxy;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img id="Codehighlighter1_16_292_Open_Image" onclick="this.style.display='none'; Codehighlighter1_16_292_Open_Text.style.display='none'; Codehighlighter1_16_292_Closed_Image.style.display='inline'; Codehighlighter1_16_292_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_16_292_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_16_292_Closed_Text.style.display='none'; Codehighlighter1_16_292_Open_Image.style.display='inline'; Codehighlighter1_16_292_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_16_292_Closed_Text">/**&nbsp;*/</span><span id="Codehighlighter1_16_292_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;ul&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;li&gt;Title:[SellWine]&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;li&gt;Description:&nbsp;[卖酒接口]&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;li&gt;Copyright&nbsp;2009&nbsp;Upengs&nbsp;Co.,&nbsp;Ltd.&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;li&gt;All&nbsp;right&nbsp;reserved.&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;li&gt;Created&nbsp;by&nbsp;[Huyvanpull]&nbsp;[2011-8-2]&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;li&gt;Midified&nbsp;by&nbsp;[modifier]&nbsp;[modified&nbsp;time]&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;/ul&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;</span><span style="color: #808080">@version</span><span style="color: #008000">&nbsp;1.0&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  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;SellWine<br /><img id="Codehighlighter1_320_349_Open_Image" onclick="this.style.display='none'; Codehighlighter1_320_349_Open_Text.style.display='none'; Codehighlighter1_320_349_Closed_Image.style.display='inline'; Codehighlighter1_320_349_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_320_349_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_320_349_Closed_Text.style.display='none'; Codehighlighter1_320_349_Open_Image.style.display='inline'; Codehighlighter1_320_349_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_320_349_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_320_349_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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;sell();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div><br />2.实现类<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;proxy;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img id="Codehighlighter1_16_321_Open_Image" onclick="this.style.display='none'; Codehighlighter1_16_321_Open_Text.style.display='none'; Codehighlighter1_16_321_Closed_Image.style.display='inline'; Codehighlighter1_16_321_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_16_321_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_16_321_Closed_Text.style.display='none'; Codehighlighter1_16_321_Open_Image.style.display='inline'; Codehighlighter1_16_321_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_16_321_Closed_Text">/**&nbsp;*/</span><span id="Codehighlighter1_16_321_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;ul&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;li&gt;Title:[WineFactory]&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;li&gt;Description:&nbsp;[type&nbsp;of&nbsp;functional&nbsp;description]&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;li&gt;Copyright&nbsp;2009&nbsp;Upengs&nbsp;Co.,&nbsp;Ltd.&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;li&gt;All&nbsp;right&nbsp;reserved.&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;li&gt;Created&nbsp;by&nbsp;[Huyvanpull]&nbsp;[2011-8-2]&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;li&gt;Midified&nbsp;by&nbsp;[modifier]&nbsp;[modified&nbsp;time]&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;/ul&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;</span><span style="color: #808080">@version</span><span style="color: #008000">&nbsp;1.0&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  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;WineFactory&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;SellWine<br /><img id="Codehighlighter1_368_519_Open_Image" onclick="this.style.display='none'; Codehighlighter1_368_519_Open_Text.style.display='none'; Codehighlighter1_368_519_Closed_Image.style.display='inline'; Codehighlighter1_368_519_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_368_519_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_368_519_Closed_Text.style.display='none'; Codehighlighter1_368_519_Open_Image.style.display='inline'; Codehighlighter1_368_519_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_368_519_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_368_519_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img id="Codehighlighter1_375_432_Open_Image" onclick="this.style.display='none'; Codehighlighter1_375_432_Open_Text.style.display='none'; Codehighlighter1_375_432_Closed_Image.style.display='inline'; Codehighlighter1_375_432_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_375_432_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_375_432_Closed_Text.style.display='none'; Codehighlighter1_375_432_Open_Image.style.display='inline'; Codehighlighter1_375_432_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_375_432_Closed_Text">/**/</span><span id="Codehighlighter1_375_432_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000">&nbsp;(non-Javadoc)<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@see&nbsp;proxy.SellWine#sell()<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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;sell()<br /><img id="Codehighlighter1_461_513_Open_Image" onclick="this.style.display='none'; Codehighlighter1_461_513_Open_Text.style.display='none'; Codehighlighter1_461_513_Closed_Image.style.display='inline'; Codehighlighter1_461_513_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_461_513_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_461_513_Closed_Text.style.display='none'; Codehighlighter1_461_513_Open_Image.style.display='inline'; Codehighlighter1_461_513_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_461_513_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_461_513_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">wineFactory卖酒.</span><span style="color: #000000">"</span><span style="color: #000000">);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div><br />3.代理类<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;proxy;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  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;WineFactoryProxy&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;SellWine<br /><img id="Codehighlighter1_66_323_Open_Image" onclick="this.style.display='none'; Codehighlighter1_66_323_Open_Text.style.display='none'; Codehighlighter1_66_323_Closed_Image.style.display='inline'; Codehighlighter1_66_323_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_66_323_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_66_323_Closed_Text.style.display='none'; Codehighlighter1_66_323_Open_Image.style.display='inline'; Codehighlighter1_66_323_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_66_323_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_66_323_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;WineFactory&nbsp;wineFactory;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;WineFactoryProxy()<br /><img id="Codehighlighter1_144_191_Open_Image" onclick="this.style.display='none'; Codehighlighter1_144_191_Open_Text.style.display='none'; Codehighlighter1_144_191_Closed_Image.style.display='inline'; Codehighlighter1_144_191_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_144_191_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_144_191_Closed_Text.style.display='none'; Codehighlighter1_144_191_Open_Image.style.display='inline'; Codehighlighter1_144_191_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_144_191_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_144_191_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wineFactory&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;WineFactory();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img id="Codehighlighter1_197_254_Open_Image" onclick="this.style.display='none'; Codehighlighter1_197_254_Open_Text.style.display='none'; Codehighlighter1_197_254_Closed_Image.style.display='inline'; Codehighlighter1_197_254_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_197_254_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_197_254_Closed_Text.style.display='none'; Codehighlighter1_197_254_Open_Image.style.display='inline'; Codehighlighter1_197_254_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_197_254_Closed_Text">/**/</span><span id="Codehighlighter1_197_254_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000">&nbsp;(non-Javadoc)<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@see&nbsp;proxy.SellWine#sell()<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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;sell()<br /><img id="Codehighlighter1_283_317_Open_Image" onclick="this.style.display='none'; Codehighlighter1_283_317_Open_Text.style.display='none'; Codehighlighter1_283_317_Closed_Image.style.display='inline'; Codehighlighter1_283_317_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_283_317_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_283_317_Closed_Text.style.display='none'; Codehighlighter1_283_317_Open_Image.style.display='inline'; Codehighlighter1_283_317_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_283_317_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_283_317_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wineFactory.sell();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div><br />4.测试类<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;proxy;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  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;Test<br /><img id="Codehighlighter1_34_195_Open_Image" onclick="this.style.display='none'; Codehighlighter1_34_195_Open_Text.style.display='none'; Codehighlighter1_34_195_Closed_Image.style.display='inline'; Codehighlighter1_34_195_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_34_195_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_34_195_Closed_Text.style.display='none'; Codehighlighter1_34_195_Open_Image.style.display='inline'; Codehighlighter1_34_195_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_34_195_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_34_195_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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)<br /><img id="Codehighlighter1_86_193_Open_Image" onclick="this.style.display='none'; Codehighlighter1_86_193_Open_Text.style.display='none'; Codehighlighter1_86_193_Closed_Image.style.display='inline'; Codehighlighter1_86_193_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_86_193_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_86_193_Closed_Text.style.display='none'; Codehighlighter1_86_193_Open_Image.style.display='inline'; Codehighlighter1_86_193_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_86_193_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_86_193_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WineFactoryProxy&nbsp;wineFactoryProxy&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;WineFactoryProxy();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wineFactoryProxy.sell();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div><br />优点:代理模式可以屏比用户真正请求的对象,使用户程序和真正对象之间解耦.<br /></div><img src ="http://www.blogjava.net/hwpok/aggbug/355596.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2011-08-02 15:36 <a href="http://www.blogjava.net/hwpok/archive/2011/08/02/355596.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]设计模型探索N -flyweight parttern之有福同享 </title><link>http://www.blogjava.net/hwpok/archive/2011/08/02/355588.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Tue, 02 Aug 2011 06:15:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2011/08/02/355588.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/355588.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2011/08/02/355588.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/355588.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/355588.html</trackback:ping><description><![CDATA[<p style="text-indent: 21pt"><span style="font-family: 宋体">让我们先来复习下</span>java<span style="font-family: 宋体">中</span>String<span style="font-family: 宋体">类型的特性：</span>String<span style="font-family: 宋体">类型的对象一旦被创造就不可改变；当两个</span>String<span style="font-family: 宋体">对象所包含的内容相同的时候，</span>JVM<span style="font-family: 宋体">只创建一个</span>String<span style="font-family: 宋体">对象对应这两个不同的对象引用。让我们来证实下着两个特性吧（如果你已经了解，请跳过直接阅读第二部分）。</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">先来验证下第二个特性：</span></p>
<p style="text-indent: 21pt">public class TestPattern {</p>
<p style="text-indent: 21pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static void main(String[] args){</span></p>
<p style="text-indent: 21pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String n = "I Love Java";</span></p>
<p style="text-indent: 21pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String m = "I Love Java";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></p>
<p style="text-indent: 21pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(n==m);</span></p>
<p style="text-indent: 21pt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span></p>
<p style="text-indent: 21pt">}</p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">这段代码会告诉你</span>n==m<span style="font-family: 宋体">是</span>true<span style="font-family: 宋体">，这就说明了在</span>JVM<span style="font-family: 宋体">中</span>n<span style="font-family: 宋体">和</span>m<span style="font-family: 宋体">两个引用了同一个</span>String<span style="font-family: 宋体">对象（如果你还分不清</span>== <span style="font-family: 宋体">和</span> equals<span style="font-family: 宋体">的区别的话，请先确认）。</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">那么接着验证下第一个特性：</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">在系统输出之前加入一行代码&#8220;</span>m = m + "hehe";<span style="font-family: 宋体">&#8221;，这时候</span>n==m<span style="font-family: 宋体">结果为</span>false<span style="font-family: 宋体">，为什么刚才两个还是引用相同的对象，现在就不是了呢？原因就是在执行后添加语句时，</span>m<span style="font-family: 宋体">指向了一个新创建的</span>String<span style="font-family: 宋体">对象，而不是修改引用的对象。<br /></span></p>
<p style="text-indent: 21pt">呵呵，说着说着就差点跑了题，并不是每个String的特性都跟我们今天的主题有关的。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String<span style="font-family: 宋体">类型的设计避免了在创建</span>N<span style="font-family: 宋体">多的</span>String<span style="font-family: 宋体">对象时产生的不必要的资源损耗，可以说是享元模式应用的范例，那么让我们带着对享元的一点模糊的认识开始，来看看怎么在自己的程序中正确的使用享元模式！<br /><br />享元模式:运用共享技术有效地支持大量大量细粒度的对象.</p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">享元模式英文称为&#8220;</span><span style="font-family: Tahoma">Flyweight Pattern</span><span style="font-family: 宋体">&#8221;，我非常感谢将</span><span style="font-family: Tahoma">Flyweight Pattern</span><span style="font-family: 宋体">翻译成享元模式的那位强人，因为这个词将这个模式使用的方式明白得表示了出来；如果翻译成为羽量级模式或者蝇量级模式等等，虽然可以含蓄的表现出使用此模式达到的目的，但是还是没有抓住此模式的关键。</span><span style="font-family: Tahoma"></span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">享元模式的定义为：采用一个共享来避免大量拥有相同内容对象的开销。这种开销中最常见、直观的就是内存的损耗。</span><span style="font-family: 宋体">享元模式以共享的方式高效的支持大量的细粒度对象。</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">在名字和定义中都体现出了共享这一个核心概念，那么怎么来实现共享呢？要知道每个事物都是不同的，但是又有一定的共性，如果只有完全相同的事物才能共享，那么享元模式可以说就是不可行的；因此我们应该尽量将事物的共性共享，而又保留它的个性。为了做到这点，</span><span style="font-family: 宋体">享元模式中区分了内蕴状态和外蕴状态。内蕴状态就是共性，外蕴状态就是个性了。<br /></span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">注：共享的对象必须是不可变的，不然一变则全变（如果有这种需求除外）。<br />&nbsp;&nbsp;&nbsp;内蕴状态</span><span style="font-family: 宋体">存储在享元内部，不会随环境的改变而有所不同，是可以共享的；外蕴状态是不可以共享的，它随环境的改变而改变的，因此外蕴状态是由客户端来保持（因为环境的变化是由客户端引起的）。在每个具体的环境下，客户端将外蕴状态传递给享元，从而创建不同的对象出来。至于怎样来维护客户端保持的外蕴状态和享元内部保持的内蕴状态的对应关系，你先不用担心这个问题，我们后面会涉及到的。</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">我们引用《</span>Java<span style="font-family: 宋体">与模式》中的分类，将享元模式分为：单纯享元模式和复合享元模式。在下一个小节里面我们将详细的讲解这两种享元模式。</span></p>
<p style="text-indent: 21pt"><br /><br />享元模式的组成部份:<br />1.享元接口 定义了享元<br />2.具体享远 实现享元接口<br />3.享元工厂 负责管理和创建享元对象,一般包含一个Map, 保存享元对象,使用都请求享元时,先到map里找是否有这个享元,如果有,返回,没有就创建该享元.机制有点像对时所做的简单的缓存.<br />各部份的组成关系:</p>
<p style="text-indent: -21pt; margin: 0cm 0cm 0pt 21pt"><span style="font-family: 宋体"><img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/hwpok/flyweight.jpg" width="539" height="226" /><br /><br />使用优缺点</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">享元模式优点就在于它能够大幅度的降低内存中对象的数量；而为了做到这一步也带来了它的缺点：它使得系统逻辑复杂化，而且在一定程度上外蕴状态影响了系统的速度。</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">所以一定要切记使用享元模式的条件：</span></p>
<p style="text-indent: -21pt; margin: 0cm 0cm 0pt 42pt"><span>1)<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体">系统中有大量的对象，他们使系统的效率降低。</span></p>
<p style="text-indent: -21pt; margin: 0cm 0cm 0pt 42pt"><span>2)<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体">这些对象的状态可以分离出所需要的内外两部分。</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体; color: black">外蕴状态和内蕴状态的划分以及两者关系的对应也是非常值得重视的。只有将内外划分妥当才能使内蕴状态发挥它应有的作用；如果划分失误，在最糟糕的情况下系统中的对象是一个也不会减少的！两者的对应关系的维护和查找也是要花费一定的空间（当然这个比起不使用共享对象要小得多）和时间的，可以说享元模式就是使用时间来换取空间的。在</span><span style="color: black">Gof</span><span style="font-family: 宋体; color: black">的书中是使用了</span><span style="color: black">B</span><span style="font-family: 宋体; color: black">树来进行对应关系查找优化。<br /></span></p>
<p><br />总结<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 也许你要长叹一声：这个享元模式未必太复杂了吧！这点是不得不承认的，也许由于它的复杂，实际应用也不是很多，这是我们更加无法看清他的真面目了。不过享元模式并不是鸡肋，它的精髓&#8212;&#8212;共享是对我们系统优化非常有好处的，而且这种思想已经别越来越多的应用，这应该就算是享元模式的应用了吧。如果你已经领会到了享元模式的精髓，那么也就是掌握了享元模式了!<br /><br /><span style="font-family: 宋体"><span style="font-family: 宋体; font-size: 10.5pt"><span style="font-family: 宋体; font-size: 12pt">&nbsp;&nbsp;&nbsp; 匆匆学完了享元模式，不知道理解上有没有纰漏，希望大家能指正出来，一起共同进步！</span><span style="font-family: 宋体; font-size: 12pt">其实我一直想使用一个实际系统中或者实践中的例子来讲解享元模式，可是毕竟自己的工作经验太少了！！于是想在网上找一些灵感来，可是狂搜一阵子也没有发现什么，于是就又落俗套的使用了一个比喻的例子。如果您对此深有体会的话，还烦请不吝赐教！！</span></span></span></p>
<p style="text-indent: 21pt"><br /><br /><br /></span>&nbsp;</p><img src ="http://www.blogjava.net/hwpok/aggbug/355588.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2011-08-02 14:15 <a href="http://www.blogjava.net/hwpok/archive/2011/08/02/355588.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]设计模型探索M-state parttern之各有千秋 </title><link>http://www.blogjava.net/hwpok/archive/2011/08/02/355573.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Tue, 02 Aug 2011 05:15:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2011/08/02/355573.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/355573.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2011/08/02/355573.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/355573.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/355573.html</trackback:ping><description><![CDATA[<p>状态模式 </p>
<p>状态模式：允许对象在内部状态改变时改变它的行为，对象看起来好像修改了它的类。 <br />状态模式的组成部份:<br />1.环境,是一个类,该类含有抽象状态声明的变量,可引用具体的状态实例,用户对环境类的实例在某一些状态的行为感兴趣.<br />2.抽象状态,抽象状态是一个接口名抽象类,抽象状态中定义了与环境的一个特定状态相关的若干方法.<br />3.具体状态,实现抽象接口<br />各组成部份之间的关系:<br /><img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/hwpok/state.jpg" width="451" height="208" /><br />例子<br />1.状态:</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;state;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img id="Codehighlighter1_16_290_Open_Image" onclick="this.style.display='none'; Codehighlighter1_16_290_Open_Text.style.display='none'; Codehighlighter1_16_290_Closed_Image.style.display='inline'; Codehighlighter1_16_290_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_16_290_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_16_290_Closed_Text.style.display='none'; Codehighlighter1_16_290_Open_Image.style.display='inline'; Codehighlighter1_16_290_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_16_290_Closed_Text">/**&nbsp;*/</span><span id="Codehighlighter1_16_290_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;ul&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;li&gt;Title:[IState]&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;li&gt;Description:&nbsp;[状态接口]&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;li&gt;Copyright&nbsp;2009&nbsp;Upengs&nbsp;Co.,&nbsp;Ltd.&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;li&gt;All&nbsp;right&nbsp;reserved.&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;li&gt;Created&nbsp;by&nbsp;[Huyvanpull]&nbsp;[2011-8-2]&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;li&gt;Midified&nbsp;by&nbsp;[modifier]&nbsp;[modified&nbsp;time]&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;/ul&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;</span><span style="color: #808080">@version</span><span style="color: #008000">&nbsp;1.0&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  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;IState<br /><img id="Codehighlighter1_316_532_Open_Image" onclick="this.style.display='none'; Codehighlighter1_316_532_Open_Text.style.display='none'; Codehighlighter1_316_532_Closed_Image.style.display='inline'; Codehighlighter1_316_532_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_316_532_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_316_532_Closed_Text.style.display='none'; Codehighlighter1_316_532_Open_Image.style.display='inline'; Codehighlighter1_316_532_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_316_532_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_316_532_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br /><img id="Codehighlighter1_325_501_Open_Image" onclick="this.style.display='none'; Codehighlighter1_325_501_Open_Text.style.display='none'; Codehighlighter1_325_501_Closed_Image.style.display='inline'; Codehighlighter1_325_501_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_325_501_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_325_501_Closed_Text.style.display='none'; Codehighlighter1_325_501_Open_Image.style.display='inline'; Codehighlighter1_325_501_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_325_501_Closed_Text">/**&nbsp;*/</span><span id="Codehighlighter1_325_501_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&lt;ul&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&lt;li&gt;Description:[显示状态]&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&lt;li&gt;Created&nbsp;by&nbsp;[Huyvanpull]&nbsp;[2011-8-2]&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&lt;li&gt;Midified&nbsp;by&nbsp;[modifier]&nbsp;[modified&nbsp;time]&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&lt;/ul&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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;showState();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div>
<p>2.具体状态1:</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;state;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  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;LowState&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;IState<br /><img id="Codehighlighter1_56_136_Open_Image" onclick="this.style.display='none'; Codehighlighter1_56_136_Open_Text.style.display='none'; Codehighlighter1_56_136_Closed_Image.style.display='inline'; Codehighlighter1_56_136_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_56_136_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_56_136_Closed_Text.style.display='none'; Codehighlighter1_56_136_Open_Image.style.display='inline'; Codehighlighter1_56_136_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_56_136_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_56_136_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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;showState()<br /><img id="Codehighlighter1_90_131_Open_Image" onclick="this.style.display='none'; Codehighlighter1_90_131_Open_Text.style.display='none'; Codehighlighter1_90_131_Closed_Image.style.display='inline'; Codehighlighter1_90_131_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_90_131_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_90_131_Closed_Text.style.display='none'; Codehighlighter1_90_131_Open_Image.style.display='inline'; Codehighlighter1_90_131_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_90_131_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_90_131_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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 /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div>
<p><br />3.具体状态2</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;state;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  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;NormalState&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;IState<br /><img id="Codehighlighter1_59_140_Open_Image" onclick="this.style.display='none'; Codehighlighter1_59_140_Open_Text.style.display='none'; Codehighlighter1_59_140_Closed_Image.style.display='inline'; Codehighlighter1_59_140_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_59_140_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_59_140_Closed_Text.style.display='none'; Codehighlighter1_59_140_Open_Image.style.display='inline'; Codehighlighter1_59_140_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_59_140_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_59_140_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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;showState()<br /><img id="Codehighlighter1_93_135_Open_Image" onclick="this.style.display='none'; Codehighlighter1_93_135_Open_Text.style.display='none'; Codehighlighter1_93_135_Closed_Image.style.display='inline'; Codehighlighter1_93_135_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_93_135_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_93_135_Closed_Text.style.display='none'; Codehighlighter1_93_135_Open_Image.style.display='inline'; Codehighlighter1_93_135_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_93_135_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_93_135_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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 /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div>
<p>4.具体状态3</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;state;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  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;HeightState&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;IState<br /><img id="Codehighlighter1_59_136_Open_Image" onclick="this.style.display='none'; Codehighlighter1_59_136_Open_Text.style.display='none'; Codehighlighter1_59_136_Closed_Image.style.display='inline'; Codehighlighter1_59_136_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_59_136_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_59_136_Closed_Text.style.display='none'; Codehighlighter1_59_136_Open_Image.style.display='inline'; Codehighlighter1_59_136_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_59_136_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_59_136_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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;showState()<br /><img id="Codehighlighter1_93_134_Open_Image" onclick="this.style.display='none'; Codehighlighter1_93_134_Open_Text.style.display='none'; Codehighlighter1_93_134_Closed_Image.style.display='inline'; Codehighlighter1_93_134_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_93_134_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_93_134_Closed_Text.style.display='none'; Codehighlighter1_93_134_Open_Image.style.display='inline'; Codehighlighter1_93_134_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_93_134_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_93_134_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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 /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div>
<p>5.环境</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;state;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  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;StateMometer<br /><img id="Codehighlighter1_42_221_Open_Image" onclick="this.style.display='none'; Codehighlighter1_42_221_Open_Text.style.display='none'; Codehighlighter1_42_221_Closed_Image.style.display='inline'; Codehighlighter1_42_221_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_42_221_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_42_221_Closed_Text.style.display='none'; Codehighlighter1_42_221_Open_Image.style.display='inline'; Codehighlighter1_42_221_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_42_221_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_42_221_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;IState&nbsp;state;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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;showState()<br /><img id="Codehighlighter1_106_139_Open_Image" onclick="this.style.display='none'; Codehighlighter1_106_139_Open_Text.style.display='none'; Codehighlighter1_106_139_Closed_Image.style.display='inline'; Codehighlighter1_106_139_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_106_139_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_106_139_Closed_Text.style.display='none'; Codehighlighter1_106_139_Open_Image.style.display='inline'; Codehighlighter1_106_139_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_106_139_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_106_139_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;state.showState();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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;setState(IState&nbsp;state)<br /><img id="Codehighlighter1_185_219_Open_Image" onclick="this.style.display='none'; Codehighlighter1_185_219_Open_Text.style.display='none'; Codehighlighter1_185_219_Closed_Image.style.display='inline'; Codehighlighter1_185_219_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_185_219_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_185_219_Closed_Text.style.display='none'; Codehighlighter1_185_219_Open_Image.style.display='inline'; Codehighlighter1_185_219_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_185_219_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_185_219_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.state&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;state;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div>
<p>6.测试</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;state;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  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;Test<br /><img id="Codehighlighter1_34_511_Open_Image" onclick="this.style.display='none'; Codehighlighter1_34_511_Open_Text.style.display='none'; Codehighlighter1_34_511_Closed_Image.style.display='inline'; Codehighlighter1_34_511_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_34_511_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_34_511_Closed_Text.style.display='none'; Codehighlighter1_34_511_Open_Image.style.display='inline'; Codehighlighter1_34_511_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_34_511_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_34_511_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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)<br /><img id="Codehighlighter1_86_509_Open_Image" onclick="this.style.display='none'; Codehighlighter1_86_509_Open_Text.style.display='none'; Codehighlighter1_86_509_Closed_Image.style.display='inline'; Codehighlighter1_86_509_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_86_509_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_86_509_Closed_Text.style.display='none'; Codehighlighter1_86_509_Open_Image.style.display='inline'; Codehighlighter1_86_509_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_86_509_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_86_509_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IState&nbsp;state&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;LowState();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StateMometer&nbsp;stateMoneter&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;StateMometer();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stateMoneter.setState(state);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stateMoneter.showState();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;state&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;NormalState();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stateMoneter.setState(state);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stateMoneter.showState();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;state&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;HeightState();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stateMoneter.setState(state);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stateMoneter.showState();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div>
<p>&nbsp;</p>
<p>要点： </p>
<p>1． 策略模式和状态模式是双胞胎，它们有相同的类图，但是它们的意图不同。策略模式是围绕可以互换的算法来成功创建业务的,然而状态模式是通过改变对象内部的状态来帮助对象控制自己的行为. </p>
<p>2． Context将与状态相关的操作委托给当前的Concrete State对象处理。 </p>
<p>3． Context可将自身作为一个参数传递给处理该请求的状态对象。这使得状态对象在必要时可访问Context。 </p>
<p>4． Context或Concrete State类都可决定哪个状态是另外哪一个的后继者，以及是在何种条件下进行状态转换。也就是说可以在State中保存对Concrete State的引用，在必要时设置具体的状态，做到状态的转换。 </p>
<p>5． 一般来讲，当状态转换是固定的时候，状态转换就适合放在Context中。然而，当转换是更动态的时候，通常会放到具体的状态类中进行。（具体状态类持有Context的引用，实现状态的转换） </p>
<p>&nbsp;</p>
<p>适用性： </p>
<p>1. 一个对象的行为取决于它的状态 , 并且它必须在运行时刻根据状态改变它的行为。 </p>
<p>2. 一个操作中含有庞大的多分支的条件语句，且这些分支依赖于该对象的状态。这个状态通常用一个或多个枚举常量表示。通常，有多个操作包含这一相同的条件结构。 State模式将每一个条件分支放入一独立的类中。这使得你可以根据对象自身的情况将对象的状态作为一个对象，这一对象可以不依赖于其他对象而独立变化。 </p>
<p>&nbsp;</p>
<p>效果： </p>
<p>1. State模式将与特定状态相关的行为局部化，并且将不同状态的行为分割开来。 </p>
<p>State模式将所有与一个特定的状态相关的行为都放入一个对象中。因为所有与状态相关的代码都存在于某一个State子类中, 所以通过定义新的子类可以很容易的增加新的状态和转换。 </p>
<p>另一个方法是使用数据值定义内部状态并且让Context操作来显式地检查这些数据。但这样将会使整个Context的实现中遍布看起来很相似的条件语句或case语句。增加一个新的状态可能需要改变若干个操作，这就使得维护变得复杂了。 </p>
<p>State模式避免了这个问题,但可能会引入另一个问题,因为该模式将不同状态的行为分布在多个State子类中。这就增加了子类的数目，相对于单个类的实现来说不够紧凑。但是如果有许多状态时这样的分布实际上更好一些 , 否则需要使用巨大的条件语句。正如很长的过程一样，巨大的条件语句是不受欢迎的。它们形成一大整块并且使得代码不够清晰，这又使得它们难以修改和扩展。 State模式提供了一个更好的方法来组织与特定状态相关的代码。决定状态转移的逻辑不在单块的 if或switch语句中, 而是分布在State子类之间。将每一个状态转换和动作封装到一个类中，就把着眼点从执行状态提高到整个对象的状态。这将使代码结构化并使其意图更加清晰。 </p>
<p>2. State对象可被共享。如果State对象没有实例变量，即它们表示的状态完全以它们的类型来编码，那么各Context对象可以共享一个 State对象。</p>
<p><br /><br /><br /><br /><br />&nbsp;</p><img src ="http://www.blogjava.net/hwpok/aggbug/355573.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2011-08-02 13:15 <a href="http://www.blogjava.net/hwpok/archive/2011/08/02/355573.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]设计模型探索L-composite parttern之玉树临风</title><link>http://www.blogjava.net/hwpok/archive/2011/08/02/355570.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Tue, 02 Aug 2011 04:22:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2011/08/02/355570.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/355570.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2011/08/02/355570.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/355570.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/355570.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 组合模式：允许你将对象组合成树型结构来表现&#8220;整体/部分&#8221;层次结构。组合能让客户以一致的方式处理个别对象以及对象组合.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Composite模式涉及的是一组对象，其中有些对象可能含有其他的对象；因此，有些对象可能代表一个对象群组，而其他的则是单个对象，即叶子。利用Composite模式建模包含两个重要的建模概...&nbsp;&nbsp;<a href='http://www.blogjava.net/hwpok/archive/2011/08/02/355570.html'>阅读全文</a><img src ="http://www.blogjava.net/hwpok/aggbug/355570.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2011-08-02 12:22 <a href="http://www.blogjava.net/hwpok/archive/2011/08/02/355570.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]设计模型探索K-builder parttern之各施其职 </title><link>http://www.blogjava.net/hwpok/archive/2011/08/02/355544.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Mon, 01 Aug 2011 17:53:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2011/08/02/355544.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/355544.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2011/08/02/355544.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/355544.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/355544.html</trackback:ping><description><![CDATA[<div>生成器模式<br />&nbsp;&nbsp;&nbsp; 生成器模式是将一个复杂的对象的构建与它的表示分离,使同样的构建过程可能创建不同的表示.<br />&nbsp;&nbsp;&nbsp; 是为了将构建复杂对象的<strong><em>过程</em></strong>和它的<em><strong>部件</strong></em>解耦.注意: 是解耦<strong><em>过程</em></strong>和<em><strong>部件</strong></em>.
<p>因为一个复杂的对象,不但有很多大量组成部分,如汽车,有很多部件:车轮 方向盘 发动机还有各种小零件等等,部件很多,但远不止这些,如何将这些部件装配成一辆汽车,这个装配过程也很复杂(需要很好的组装技术),Builder模式就是为了将部件和组装过程分开.<br />生成器的组成部份:<br />&nbsp;&nbsp; 1.产品:&nbsp;&nbsp;复杂对象&nbsp;&nbsp;<br />&nbsp;&nbsp; 2.抽象生成器:抽象生成器是一个接口,该接口除了创建一个产品对象的各个组件定义了若干方法以外,还要定义返回project;<br />&nbsp;&nbsp; 3.具体生成器:实现抽象生成器的方法<br />&nbsp;&nbsp;&nbsp;4.指挥者:它是一个类,该类含有抽象生成器的接口生成变量.它的职责是根据用户提供的生成器的种类来生成具体的产品对象.<br />生成器各部份之间的关系:<span style="font-family: 宋体" times="" new=""  roman?;="" ? roman??="" ??> </span><br /><img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/hwpok/builder.gif" width="554" height="409" /><br /><span style="font-family: 宋体" times="" new=""  roman?;="" ? roman??="" ??>当客户需要一个产品时，把需要的参数传递个导向器，导向器根据传递的参数调用具体的生成器，具体的生成器通过一系列的操作</span>(getAnimal()<span style="font-family: 宋体" times="" new=""  roman?;="" ? roman??="" ??>通过调用其它的接口方法实现</span>)<span style="font-family: 宋体" times="" new=""  roman?;="" ? roman??="" ??>最会返回一个产品。</span></p>
<p><span style="font-family: 宋体" times="" new=""  roman?;="" ? roman??="" ??><span style="font-family: 宋体" times="" new=""  roman?;="" ? roman??="" ??>结论：生成器模式使得客户可以更加精细的控制一个对象的构建，每个具体的创建者包含了创建和装配一个特定产品的所有代码，这些代码只用写一次，便可以被不同的</span>Director<span style="font-family: 宋体" times="" new=""  roman?;="" ? roman??="" ??>使用，从而可以装配出不同的对象。<br /><br />和抽象工厂的区别:</p>
<p><wbr>&nbsp;&nbsp;&nbsp; 抽象工厂需要生产一个迷宫（Maze* maze），然后一步步生产迷宫。</p>
<p>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr> 而生成器模式就不一样了，生成器（builder)封装了建造一个笔记本配件的方法。CreateMaze()只需要对这些配件进行组装。最后直接返回一个产品。</p>
<p>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>&nbsp;<wbr>这样看来工厂更像一种特殊的生成器，因为生成器也可以更换builder，生成器还能够生产不是一个系列的产品。即生成器不仅仅可以CreateMaze(),还可以生产CreateStandMaze()。类比到电脑，即不仅仅可以 CreateComputer(),还可以CreateComplexComputer()，更换builder也可以生产相同系列，不同的产品。</p>
<p></span>&nbsp;</p>
<p></span><br /><br />&nbsp;</p></div> <img src ="http://www.blogjava.net/hwpok/aggbug/355544.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2011-08-02 01:53 <a href="http://www.blogjava.net/hwpok/archive/2011/08/02/355544.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]设计模型探索J-prototype parttern之如法炮制 </title><link>http://www.blogjava.net/hwpok/archive/2011/08/02/355543.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Mon, 01 Aug 2011 17:09:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2011/08/02/355543.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/355543.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2011/08/02/355543.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/355543.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/355543.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 原型模式&nbsp;&nbsp;&nbsp;&nbsp; 原型模式是在已指定对象的基础上，然后通过拷贝这些原型对象创建新的对象。原型模式有两个组成部份1.抽象原型2.具体原型例子:1.抽象原型Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->pack...&nbsp;&nbsp;<a href='http://www.blogjava.net/hwpok/archive/2011/08/02/355543.html'>阅读全文</a><img src ="http://www.blogjava.net/hwpok/aggbug/355543.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2011-08-02 01:09 <a href="http://www.blogjava.net/hwpok/archive/2011/08/02/355543.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]设计模型探索I3-abstract Factory method parttern /kit parttern之盘古开天 (8-1 23:10) </title><link>http://www.blogjava.net/hwpok/archive/2011/08/01/355539.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Mon, 01 Aug 2011 15:23:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2011/08/01/355539.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/355539.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2011/08/01/355539.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/355539.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/355539.html</trackback:ping><description><![CDATA[抽象工厂<br />抽象工厂又叫配套模式.<br />
<p>该模式和工厂方法模式很相似，也是一个抽象基类和若干个具体工厂类，不同的是抽象工厂的工厂基类定义了多个虚工厂方法，每个虚工厂方法负责返回一种产品，多个工厂方法返回多种产品，并且这些产品具有某些联系。<br />GOF 概扩: 提供一个一系列或相互依赖的接口,需无须指定它们的具体类.<br />抽象工厂模式的组成部份:<br />1.产品基类<br />2.具体产品<br />3.工厂基类<br />4.具体工厂<br />&nbsp;&nbsp;&nbsp; <font color="#ff0000"><span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium Simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="text-align: left; line-height: 25px; text-indent: 28px; font-size: 14px; -webkit-border-horizontal-spacing: 10px; -webkit-border-vertical-spacing: 10px" class="Apple-style-span">抽象工厂就不止生产<span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium Simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="text-align: left; line-height: 25px; text-indent: 28px; font-size: 14px; -webkit-border-horizontal-spacing: 10px; -webkit-border-vertical-spacing: 10px" class="Apple-style-span">Nokia手机了，还生产相关的周边产品，首先<span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium Simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="text-align: left; line-height: 25px; text-indent: 28px; font-size: 14px; -webkit-border-horizontal-spacing: 10px; -webkit-border-vertical-spacing: 10px" class="Apple-style-span">NokiaFactory基类会定义两个虚方法，一个是Create<span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium Simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="text-align: left; line-height: 25px; text-indent: 28px; font-size: 14px; -webkit-border-horizontal-spacing: 10px; -webkit-border-vertical-spacing: 10px" class="Apple-style-span">NokiaPhone用来生产手机，另一个是Create<span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium Simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="text-align: left; line-height: 25px; text-indent: 28px; font-size: 14px; -webkit-border-horizontal-spacing: 10px; -webkit-border-vertical-spacing: 10px" class="Apple-style-span">NokiaCharger用于生产<font color="#ff0000">对应型号</font>的手机充电器（假定不同型号手机使用不同的充电器）。然后派生类N97Factory就要生产两种相关的产品，一个是N97Phone,还有一个是N97Charger，<font color="#ff0000">这两个对象是对应的关系</font>，因此封装到抽象工厂来<font color="#ff0000">生产一系列相关的对象</font>。</span></span></span></span></span></span></span></span></span></span></font></p>
<p>&nbsp;&nbsp;&nbsp; <font color="#ff0000"><span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium Simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="text-align: left; line-height: 25px; text-indent: 28px; font-size: 14px; -webkit-border-horizontal-spacing: 10px; -webkit-border-vertical-spacing: 10px" class="Apple-style-span"><span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium Simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="text-align: left; line-height: 25px; text-indent: 28px; font-size: 14px; -webkit-border-horizontal-spacing: 10px; -webkit-border-vertical-spacing: 10px" class="Apple-style-span"><span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium Simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="text-align: left; line-height: 25px; text-indent: 28px; font-size: 14px; -webkit-border-horizontal-spacing: 10px; -webkit-border-vertical-spacing: 10px" class="Apple-style-span"><span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium Simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="text-align: left; line-height: 25px; text-indent: 28px; font-size: 14px; -webkit-border-horizontal-spacing: 10px; -webkit-border-vertical-spacing: 10px" class="Apple-style-span"><span style="widows: 2; text-transform: none; text-indent: 0px; border-collapse: separate; font: medium Simsun; white-space: normal; orphans: 2; letter-spacing: normal; color: rgb(0,0,0); word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class="Apple-style-span"><span style="text-align: left; line-height: 25px; text-indent: 28px; font-size: 14px; -webkit-border-horizontal-spacing: 10px; -webkit-border-vertical-spacing: 10px" class="Apple-style-span">总结：用最简单的话来概括就是，简单工厂只有<font color="#ff0000">一个具体</font>工厂类来创建<font color="#ff0000">一种基类</font>的<font color="#ff0000">多个不同派生类</font>，工厂方法就是有多个派生于一个基类的具体工厂类，每个具体工厂只生产<font color="#ff0000">一种基类的一个派生类</font>，抽象工厂也是只有一个工厂基类，但是每个具体工厂生产<font color="#ff0000">多个相关基类</font>的<font color="#ff0000">各一个派生类</font>。</span></span></span></span></span></span></span></span></span></span></font></p>
<p><br />&nbsp;</p><img src ="http://www.blogjava.net/hwpok/aggbug/355539.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2011-08-01 23:23 <a href="http://www.blogjava.net/hwpok/archive/2011/08/01/355539.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]设计模型探索I2-Factory method parttern 之盘古开天 </title><link>http://www.blogjava.net/hwpok/archive/2011/08/01/355537.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Mon, 01 Aug 2011 15:10:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2011/08/01/355537.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/355537.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2011/08/01/355537.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/355537.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/355537.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 工厂方法模式:&nbsp;&nbsp;&nbsp; 该模式有一个抽象基类和若干个派生的具体工厂类，基类定义了一个虚工厂方法返回指定产品类的基类，派生类需要实现该虚方法并创建具体产品类返回。注意工厂方法的每个具体工厂只负责返回一种产品类。&nbsp;&nbsp;&nbsp; 工厂和产品是一种一一对应的平行的关系.&nbsp;&nbsp;&nbsp;&nbsp; GOF对工厂方法模式的概扩是:定义一个...&nbsp;&nbsp;<a href='http://www.blogjava.net/hwpok/archive/2011/08/01/355537.html'>阅读全文</a><img src ="http://www.blogjava.net/hwpok/aggbug/355537.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2011-08-01 23:10 <a href="http://www.blogjava.net/hwpok/archive/2011/08/01/355537.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]设计模型探索I1-Simple factory parttern 之盘古开天 </title><link>http://www.blogjava.net/hwpok/archive/2011/08/01/355532.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Mon, 01 Aug 2011 14:03:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2011/08/01/355532.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/355532.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2011/08/01/355532.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/355532.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/355532.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 面临问题:&nbsp;&nbsp;&nbsp; 由于需求的变化,这个对对象的具体实现经常需要剧烈变化,但是它却拥有着较稳定的接口.解决办法:&nbsp;&nbsp;&nbsp; 如何应对这种变化,需要提供一种"封装机制"来隔离这种变化,从而保持系统中依赖该对象的对象随着需求变化而变化.简单工厂模式:&nbsp;&nbsp;&nbsp; 严格说并不是一个设计模式。简单工厂没有抽象类，只有一个具体工厂...&nbsp;&nbsp;<a href='http://www.blogjava.net/hwpok/archive/2011/08/01/355532.html'>阅读全文</a><img src ="http://www.blogjava.net/hwpok/aggbug/355532.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2011-08-01 22:03 <a href="http://www.blogjava.net/hwpok/archive/2011/08/01/355532.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]设计模型探索H-Iterator parttern 之深藏不露</title><link>http://www.blogjava.net/hwpok/archive/2011/08/01/355487.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Mon, 01 Aug 2011 05:29:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2011/08/01/355487.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/355487.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2011/08/01/355487.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/355487.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/355487.html</trackback:ping><description><![CDATA[<div>迭代器模式,又叫游标模式.<br />
<p>提供一种方法访问一个容器（container）对象中各个元素，而又不需暴露该对象的内部细节。<br />在迭代器模式中，具体迭代器角色和具体容器角色是耦合在一起的 &#8212;&#8212; 遍历算法是与容器的内部细节紧密相关的。为了使客户程序从与具体迭代器角色耦合的困境中脱离出来，避免具体迭代器角色的更换给客户程序带来的修改，迭代器模式抽象了具体迭代器角色，使得客户程序更具一般性和重用性。这被称为多态迭代<br />迭代器模式的组成部份<br />1.集合,一个接口,规定了具体集合需要实现的操作.<br />2.具体集合,是实现集合接口的实例,具体集合按着一定的结构存储对象,具体集合应当有一个方法返回针对该集合的具体迭代器.<br />3.迭代器, 一个接口,规定了遍历集合的方法.<br />4.具体迭代器<br />迭代器各组成部份之间的关系<br /><img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/hwpok/iterator.jpg" width="530" height="375" /><br />例子:<br />集合:</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;iterator;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  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;Aggregate</span><span style="color: #000000">&lt;</span><span style="color: #000000">E</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /><img id="Codehighlighter1_49_189_Open_Image" onclick="this.style.display='none'; Codehighlighter1_49_189_Open_Text.style.display='none'; Codehighlighter1_49_189_Closed_Image.style.display='inline'; Codehighlighter1_49_189_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_49_189_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_49_189_Closed_Text.style.display='none'; Codehighlighter1_49_189_Open_Image.style.display='inline'; Codehighlighter1_49_189_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_49_189_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_49_189_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Iterator</span><span style="color: #000000">&lt;</span><span style="color: #000000">E</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;createIterator();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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;length();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;E&nbsp;get(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;index);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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;add(E&nbsp;obj);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div>
<p>具体集合:</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;iterator;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.ArrayList;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.List;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  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;ConcreteAggregate</span><span style="color: #000000">&lt;</span><span style="color: #000000">E</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;Aggregate</span><span style="color: #000000">&lt;</span><span style="color: #000000">E</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /><img id="Codehighlighter1_129_507_Open_Image" onclick="this.style.display='none'; Codehighlighter1_129_507_Open_Text.style.display='none'; Codehighlighter1_129_507_Closed_Image.style.display='inline'; Codehighlighter1_129_507_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_129_507_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_129_507_Closed_Text.style.display='none'; Codehighlighter1_129_507_Open_Image.style.display='inline'; Codehighlighter1_129_507_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_129_507_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_129_507_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;List</span><span style="color: #000000">&lt;</span><span style="color: #000000">E</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;items&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ArrayList</span><span style="color: #000000">&lt;</span><span style="color: #000000">E</span><span style="color: #000000">&gt;</span><span style="color: #000000">();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Iterator</span><span style="color: #000000">&lt;</span><span style="color: #000000">E</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;createIterator()<br /><img id="Codehighlighter1_228_280_Open_Image" onclick="this.style.display='none'; Codehighlighter1_228_280_Open_Text.style.display='none'; Codehighlighter1_228_280_Closed_Image.style.display='inline'; Codehighlighter1_228_280_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_228_280_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_228_280_Closed_Text.style.display='none'; Codehighlighter1_228_280_Open_Image.style.display='inline'; Codehighlighter1_228_280_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_228_280_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_228_280_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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;ConcreteIterator</span><span style="color: #000000">&lt;</span><span style="color: #000000">E</span><span style="color: #000000">&gt;</span><span style="color: #000000">(</span><span style="color: #0000ff">this</span><span style="color: #000000">);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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;length()<br /><img id="Codehighlighter1_315_350_Open_Image" onclick="this.style.display='none'; Codehighlighter1_315_350_Open_Text.style.display='none'; Codehighlighter1_315_350_Closed_Image.style.display='inline'; Codehighlighter1_315_350_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_315_350_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_315_350_Closed_Text.style.display='none'; Codehighlighter1_315_350_Open_Image.style.display='inline'; Codehighlighter1_315_350_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_315_350_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_315_350_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;items.size();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;E&nbsp;get(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;index)<br /><img id="Codehighlighter1_389_432_Open_Image" onclick="this.style.display='none'; Codehighlighter1_389_432_Open_Text.style.display='none'; Codehighlighter1_389_432_Closed_Image.style.display='inline'; Codehighlighter1_389_432_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_389_432_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_389_432_Closed_Text.style.display='none'; Codehighlighter1_389_432_Open_Image.style.display='inline'; Codehighlighter1_389_432_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_389_432_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_389_432_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;(E)&nbsp;items.get(index);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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;add(E&nbsp;obj)<br /><img id="Codehighlighter1_470_500_Open_Image" onclick="this.style.display='none'; Codehighlighter1_470_500_Open_Text.style.display='none'; Codehighlighter1_470_500_Closed_Image.style.display='inline'; Codehighlighter1_470_500_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_470_500_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_470_500_Closed_Text.style.display='none'; Codehighlighter1_470_500_Open_Image.style.display='inline'; Codehighlighter1_470_500_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_470_500_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_470_500_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;items.add(obj);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div>
<p><br /><br />迭代器:</p>
<p>&nbsp;</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;iterator;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  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;Iterator</span><span style="color: #000000">&lt;</span><span style="color: #000000">E</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /><img id="Codehighlighter1_48_162_Open_Image" onclick="this.style.display='none'; Codehighlighter1_48_162_Open_Text.style.display='none'; Codehighlighter1_48_162_Closed_Image.style.display='inline'; Codehighlighter1_48_162_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_48_162_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_48_162_Closed_Text.style.display='none'; Codehighlighter1_48_162_Open_Image.style.display='inline'; Codehighlighter1_48_162_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_48_162_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_48_162_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;E&nbsp;first();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;hasNext();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;E&nbsp;next();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;E&nbsp;current();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div>
<p><br />具体迭代器:</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;iterator;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  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;ConcreteIterator</span><span style="color: #000000">&lt;</span><span style="color: #000000">E</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;Iterator</span><span style="color: #000000">&lt;</span><span style="color: #000000">E</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br /><img id="Codehighlighter1_75_862_Open_Image" onclick="this.style.display='none'; Codehighlighter1_75_862_Open_Text.style.display='none'; Codehighlighter1_75_862_Closed_Image.style.display='inline'; Codehighlighter1_75_862_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_75_862_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_75_862_Closed_Text.style.display='none'; Codehighlighter1_75_862_Open_Image.style.display='inline'; Codehighlighter1_75_862_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_75_862_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_75_862_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;Aggregate</span><span style="color: #000000">&lt;</span><span style="color: #000000">E</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;aggregate;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;currentIndex&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;ConcreteIterator(Aggregate</span><span style="color: #000000">&lt;</span><span style="color: #000000">E</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;aggregate)<br /><img id="Codehighlighter1_213_255_Open_Image" onclick="this.style.display='none'; Codehighlighter1_213_255_Open_Text.style.display='none'; Codehighlighter1_213_255_Closed_Image.style.display='inline'; Codehighlighter1_213_255_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_213_255_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_213_255_Closed_Text.style.display='none'; Codehighlighter1_213_255_Open_Image.style.display='inline'; Codehighlighter1_213_255_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_213_255_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_213_255_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.aggregate&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;aggregate;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;E&nbsp;first()<br /><img id="Codehighlighter1_287_468_Open_Image" onclick="this.style.display='none'; Codehighlighter1_287_468_Open_Text.style.display='none'; Codehighlighter1_287_468_Closed_Image.style.display='inline'; Codehighlighter1_287_468_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_287_468_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_287_468_Closed_Text.style.display='none'; Codehighlighter1_287_468_Open_Image.style.display='inline'; Codehighlighter1_287_468_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_287_468_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_287_468_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentIndex&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(hasNext())<br /><img id="Codehighlighter1_346_404_Open_Image" onclick="this.style.display='none'; Codehighlighter1_346_404_Open_Text.style.display='none'; Codehighlighter1_346_404_Closed_Image.style.display='inline'; Codehighlighter1_346_404_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_346_404_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_346_404_Closed_Text.style.display='none'; Codehighlighter1_346_404_Open_Image.style.display='inline'; Codehighlighter1_346_404_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_346_404_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_346_404_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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;aggregate.get(currentIndex);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000"><br /><img id="Codehighlighter1_427_462_Open_Image" onclick="this.style.display='none'; Codehighlighter1_427_462_Open_Text.style.display='none'; Codehighlighter1_427_462_Closed_Image.style.display='inline'; Codehighlighter1_427_462_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_427_462_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_427_462_Closed_Text.style.display='none'; Codehighlighter1_427_462_Open_Image.style.display='inline'; Codehighlighter1_427_462_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_427_462_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_427_462_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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 /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;hasNext()<br /><img id="Codehighlighter1_508_566_Open_Image" onclick="this.style.display='none'; Codehighlighter1_508_566_Open_Text.style.display='none'; Codehighlighter1_508_566_Closed_Image.style.display='inline'; Codehighlighter1_508_566_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_508_566_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_508_566_Closed_Text.style.display='none'; Codehighlighter1_508_566_Open_Image.style.display='inline'; Codehighlighter1_508_566_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_508_566_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_508_566_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;(currentIndex&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;aggregate.length());<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;E&nbsp;next()<br /><img id="Codehighlighter1_597_776_Open_Image" onclick="this.style.display='none'; Codehighlighter1_597_776_Open_Text.style.display='none'; Codehighlighter1_597_776_Closed_Image.style.display='inline'; Codehighlighter1_597_776_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_597_776_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_597_776_Closed_Text.style.display='none'; Codehighlighter1_597_776_Open_Image.style.display='inline'; Codehighlighter1_597_776_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_597_776_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_597_776_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;currentIndex</span><span style="color: #000000">++</span><span style="color: #000000">;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(hasNext())<br /><img id="Codehighlighter1_654_712_Open_Image" onclick="this.style.display='none'; Codehighlighter1_654_712_Open_Text.style.display='none'; Codehighlighter1_654_712_Closed_Image.style.display='inline'; Codehighlighter1_654_712_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_654_712_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_654_712_Closed_Text.style.display='none'; Codehighlighter1_654_712_Open_Image.style.display='inline'; Codehighlighter1_654_712_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_654_712_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_654_712_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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;aggregate.get(currentIndex);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000"><br /><img id="Codehighlighter1_735_770_Open_Image" onclick="this.style.display='none'; Codehighlighter1_735_770_Open_Text.style.display='none'; Codehighlighter1_735_770_Closed_Image.style.display='inline'; Codehighlighter1_735_770_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_735_770_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_735_770_Closed_Text.style.display='none'; Codehighlighter1_735_770_Open_Image.style.display='inline'; Codehighlighter1_735_770_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_735_770_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_735_770_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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 /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;E&nbsp;current()<br /><img id="Codehighlighter1_810_860_Open_Image" onclick="this.style.display='none'; Codehighlighter1_810_860_Open_Text.style.display='none'; Codehighlighter1_810_860_Closed_Image.style.display='inline'; Codehighlighter1_810_860_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_810_860_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_810_860_Closed_Text.style.display='none'; Codehighlighter1_810_860_Open_Image.style.display='inline'; Codehighlighter1_810_860_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_810_860_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_810_860_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;aggregate.get(currentIndex);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div>
<p><br /><br />测试类:</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;iterator;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  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;Test<br /><img id="Codehighlighter1_37_407_Open_Image" onclick="this.style.display='none'; Codehighlighter1_37_407_Open_Text.style.display='none'; Codehighlighter1_37_407_Closed_Image.style.display='inline'; Codehighlighter1_37_407_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_37_407_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_37_407_Closed_Text.style.display='none'; Codehighlighter1_37_407_Open_Image.style.display='inline'; Codehighlighter1_37_407_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_37_407_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_37_407_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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)<br /><img id="Codehighlighter1_86_400_Open_Image" onclick="this.style.display='none'; Codehighlighter1_86_400_Open_Text.style.display='none'; Codehighlighter1_86_400_Closed_Image.style.display='inline'; Codehighlighter1_86_400_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_86_400_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_86_400_Closed_Text.style.display='none'; Codehighlighter1_86_400_Open_Image.style.display='inline'; Codehighlighter1_86_400_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_86_400_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_86_400_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aggregate</span><span style="color: #000000">&lt;</span><span style="color: #000000">String</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;a&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ConcreteAggregate</span><span style="color: #000000">&lt;</span><span style="color: #000000">String</span><span style="color: #000000">&gt;</span><span style="color: #000000">();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a.add(</span><span style="color: #000000">"</span><span style="color: #000000">111</span><span style="color: #000000">"</span><span style="color: #000000">);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a.add(</span><span style="color: #000000">"</span><span style="color: #000000">222</span><span style="color: #000000">"</span><span style="color: #000000">);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a.add(</span><span style="color: #000000">"</span><span style="color: #000000">333</span><span style="color: #000000">"</span><span style="color: #000000">);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Iterator</span><span style="color: #000000">&lt;</span><span style="color: #000000">String</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;it&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;a.createIterator();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;(String&nbsp;s&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;it.first();&nbsp;it.hasNext();&nbsp;s&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;it.next())<br /><img id="Codehighlighter1_349_394_Open_Image" onclick="this.style.display='none'; Codehighlighter1_349_394_Open_Text.style.display='none'; Codehighlighter1_349_394_Closed_Image.style.display='inline'; Codehighlighter1_349_394_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_349_394_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_349_394_Closed_Text.style.display='none'; Codehighlighter1_349_394_Open_Image.style.display='inline'; Codehighlighter1_349_394_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_349_394_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_349_394_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(s);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div>
<p>迭代器的优点:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1、支持以不同的方式遍历一个容器角色。根据实现方式的不同，效果上会有差别。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2、简化了容器的接口。但是在java Collection中为了提高可扩展性，容器还是提供了遍历的接口。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3、对同一个容器对象，可以同时进行多个遍历。因为遍历状态是保存在每一个迭代器对象中的。<br /></p></div> <img src ="http://www.blogjava.net/hwpok/aggbug/355487.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2011-08-01 13:29 <a href="http://www.blogjava.net/hwpok/archive/2011/08/01/355487.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]设计模型探索G-Facade parttern 之九九归一 </title><link>http://www.blogjava.net/hwpok/archive/2011/08/01/355466.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Sun, 31 Jul 2011 16:37:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2011/08/01/355466.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/355466.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2011/08/01/355466.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/355466.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/355466.html</trackback:ping><description><![CDATA[<font face="宋体">外观模式<br />为子系统中的一组接口提供一个一致的界面，</font><span lang="EN-US">Facade</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">模式定义了一个高层接口，这个接口使得这一子系统更加容易使用<br />外观模式的组成部份:<br />1.子系统<br />2.外观类 包含每个子系统的类,并提供一个方法,按业务逻辑依次访问子系统里的方法,使之组成一个有机体<br />&nbsp;例子:<br />读文件: 
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;facade;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  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;ReadFile<br /><img id="Codehighlighter1_39_118_Open_Image" onclick="this.style.display='none'; Codehighlighter1_39_118_Open_Text.style.display='none'; Codehighlighter1_39_118_Closed_Image.style.display='inline'; Codehighlighter1_39_118_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_39_118_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_39_118_Closed_Text.style.display='none'; Codehighlighter1_39_118_Open_Image.style.display='inline'; Codehighlighter1_39_118_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_39_118_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_39_118_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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;readFile()<br /><img id="Codehighlighter1_75_116_Open_Image" onclick="this.style.display='none'; Codehighlighter1_75_116_Open_Text.style.display='none'; Codehighlighter1_75_116_Closed_Image.style.display='inline'; Codehighlighter1_75_116_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_75_116_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_75_116_Closed_Text.style.display='none'; Codehighlighter1_75_116_Open_Image.style.display='inline'; Codehighlighter1_75_116_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_75_116_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_75_116_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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 /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div><br />解析文件:<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;facade;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  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;ParseFile<br /><img id="Codehighlighter1_40_117_Open_Image" onclick="this.style.display='none'; Codehighlighter1_40_117_Open_Text.style.display='none'; Codehighlighter1_40_117_Closed_Image.style.display='inline'; Codehighlighter1_40_117_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_40_117_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_40_117_Closed_Text.style.display='none'; Codehighlighter1_40_117_Open_Image.style.display='inline'; Codehighlighter1_40_117_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_40_117_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_40_117_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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;parse()<br /><img id="Codehighlighter1_73_115_Open_Image" onclick="this.style.display='none'; Codehighlighter1_73_115_Open_Text.style.display='none'; Codehighlighter1_73_115_Closed_Image.style.display='inline'; Codehighlighter1_73_115_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_73_115_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_73_115_Closed_Text.style.display='none'; Codehighlighter1_73_115_Open_Image.style.display='inline'; Codehighlighter1_73_115_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_73_115_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_73_115_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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 /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div><br />存文件:<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;facade;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  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;SaveFile<br /><img id="Codehighlighter1_39_119_Open_Image" onclick="this.style.display='none'; Codehighlighter1_39_119_Open_Text.style.display='none'; Codehighlighter1_39_119_Closed_Image.style.display='inline'; Codehighlighter1_39_119_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_39_119_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_39_119_Closed_Text.style.display='none'; Codehighlighter1_39_119_Open_Image.style.display='inline'; Codehighlighter1_39_119_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_39_119_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_39_119_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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;saveFile()<br /><img id="Codehighlighter1_75_117_Open_Image" onclick="this.style.display='none'; Codehighlighter1_75_117_Open_Text.style.display='none'; Codehighlighter1_75_117_Closed_Image.style.display='inline'; Codehighlighter1_75_117_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_75_117_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_75_117_Closed_Text.style.display='none'; Codehighlighter1_75_117_Open_Image.style.display='inline'; Codehighlighter1_75_117_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_75_117_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_75_117_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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 /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div><br />外观类:<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;facade;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  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;Facade<br /><img id="Codehighlighter1_37_472_Open_Image" onclick="this.style.display='none'; Codehighlighter1_37_472_Open_Text.style.display='none'; Codehighlighter1_37_472_Closed_Image.style.display='inline'; Codehighlighter1_37_472_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_37_472_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_37_472_Closed_Text.style.display='none'; Codehighlighter1_37_472_Open_Image.style.display='inline'; Codehighlighter1_37_472_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_37_472_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_37_472_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;解析文件</span><span style="color: #008000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;ParseFile&nbsp;parseFile;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;读文件</span><span style="color: #008000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;ReadFile&nbsp;readFile;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;保存文件</span><span style="color: #008000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;SaveFile&nbsp;saveFile;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Facade()<br /><img id="Codehighlighter1_211_324_Open_Image" onclick="this.style.display='none'; Codehighlighter1_211_324_Open_Text.style.display='none'; Codehighlighter1_211_324_Closed_Image.style.display='inline'; Codehighlighter1_211_324_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_211_324_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_211_324_Closed_Text.style.display='none'; Codehighlighter1_211_324_Open_Image.style.display='inline'; Codehighlighter1_211_324_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_211_324_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_211_324_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parseFile&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ParseFile();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;readFile&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ReadFile();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;saveFile&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;SaveFile();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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;oparatFile()<br /><img id="Codehighlighter1_364_470_Open_Image" onclick="this.style.display='none'; Codehighlighter1_364_470_Open_Text.style.display='none'; Codehighlighter1_364_470_Closed_Image.style.display='inline'; Codehighlighter1_364_470_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_364_470_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_364_470_Closed_Text.style.display='none'; Codehighlighter1_364_470_Open_Image.style.display='inline'; Codehighlighter1_364_470_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_364_470_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_364_470_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.readFile.readFile();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.parseFile.parse();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.saveFile.saveFile();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div></span><br /><br />外观模式的优点:<br />
<p>正如上看到的说：客户端代码（Program）不需要关心子系统，它只需要关心CarFacade所留下来的和外部交互的接口，而子系统是在CarFacade中聚合。</p>
<p>&nbsp;<br />Fa&#231;ade模式的几个要点：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1、从客户程序的角度看，Facade模式不仅简化了整个组件系统的接口，同时对于组件内部与外部客户程序来说，从某种程度上也达到了一种&#8220;解耦&#8221;的效果&#8212;&#8212;内部子系统的任何变化不会影响到Facade接口的变化。</p>
<p>2、Facade设计模式更注重从架构的层次去看整个系统，而不是单个类的层次。Facade很多时候更是一种架构设计模式。</p>
<p>&nbsp;</p> <img src ="http://www.blogjava.net/hwpok/aggbug/355466.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2011-08-01 00:37 <a href="http://www.blogjava.net/hwpok/archive/2011/08/01/355466.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]设计模型探索F-Chain of resposibility parttern 之击鼓传花</title><link>http://www.blogjava.net/hwpok/archive/2011/08/01/355463.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Sun, 31 Jul 2011 16:04:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2011/08/01/355463.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/355463.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2011/08/01/355463.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/355463.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/355463.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 责任链模式&nbsp;&nbsp;&nbsp; 在责任链模式里，很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递，直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求，这使系统可以在不影响客户端的情况下动态的重新组织链和分配责任。责任链模式的组成部份&nbsp;&nbsp;&nbsp; 1.抽象处理者 定义出一个处理请求的接口。...&nbsp;&nbsp;<a href='http://www.blogjava.net/hwpok/archive/2011/08/01/355463.html'>阅读全文</a><img src ="http://www.blogjava.net/hwpok/aggbug/355463.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2011-08-01 00:04 <a href="http://www.blogjava.net/hwpok/archive/2011/08/01/355463.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]设计模型探索E-Adapter parttern 之桃代李疆</title><link>http://www.blogjava.net/hwpok/archive/2011/07/28/355186.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Wed, 27 Jul 2011 19:34:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2011/07/28/355186.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/355186.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2011/07/28/355186.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/355186.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/355186.html</trackback:ping><description><![CDATA[适配器模式<br />&nbsp;&nbsp;&nbsp; 将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。<br />&nbsp;&nbsp;&nbsp; 对软件系统中，如果要复用以前的&#8220;现存对象&#8221;，但是这些对象所提供的接口并不一定能适应我们的新环境，我们就要将其转换成我们需要的接口，来供我们调用。 Adapter模式通过定义一个新的接口（对要实现的功能加以抽象），和一个实现该接口的Adapter（适配器）类来透明地调用外部组件。这样替换外部组件时，最多只要修改几个Adapter类就可以了，其他源代码都不会受到影响。<br /><br />适配器模式的几个组成部分:<br />&nbsp;&nbsp; 1.目标接口,被适应的接口,最终会被适成该接口.<br />&nbsp;&nbsp;&nbsp;2.被适应接口,是需要配的接口.<br />&nbsp;&nbsp; 3.适配器<br /><br />酡配器模式(对象适配器)的各个部份的关系<br /><img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/hwpok/adapter.jpg" width="343" height="236" /><br />&nbsp;适配器的分为适器器和对象适配器:<br />
<p>&nbsp;2种模式嫁接的方式不同。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 类适配器模式采用的是多重继承的方式</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class Adapter extends Adaptee implements Target{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request(){this.SpecificRequest();}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ....</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;对象适配器采用的是包含的方式</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class Adapter implements Taget{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Adaptee adaptee;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request(){adaptee.SpecificRequest();}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;两者的区别我认为有以下几点</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.类适配器模式需要创建自身来<font color="#ff0000">创建一个Adaptee</font>,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对象适配器模式可以直接使用一个<font color="#ff0000">已有的Adaptee的实例</font>来转换接口。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.&nbsp;类适配器继承了Adaptee,所以可以通过覆写来<font color="#ff0000">扩展</font>SpecificRequest()</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对象适配器和Adaptee是包含关系<font color="#ff0000">不能扩展</font>;(其实也可以扩展的见下面)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.类适配器模式因为是继承所以相对静态，而对象适配器模式是包含是组合相对灵活(<font color="#ff6600">可以通过写adaptee子类扩展功能</font>)</p><br />适配器举例:<br />两相电插座接口:<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;adapter;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  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;TwoElectricOutLet<br /><img id="Codehighlighter1_53_104_Open_Image" onclick="this.style.display='none'; Codehighlighter1_53_104_Open_Text.style.display='none'; Codehighlighter1_53_104_Closed_Image.style.display='inline'; Codehighlighter1_53_104_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_53_104_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_53_104_Closed_Text.style.display='none'; Codehighlighter1_53_104_Open_Image.style.display='inline'; Codehighlighter1_53_104_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_53_104_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_53_104_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&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;connectTwoElectricCurrent();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span></div><br /><br />三相电插座接口:<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;adapter;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img id="Codehighlighter1_18_307_Open_Image" onclick="this.style.display='none'; Codehighlighter1_18_307_Open_Text.style.display='none'; Codehighlighter1_18_307_Closed_Image.style.display='inline'; Codehighlighter1_18_307_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_18_307_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_18_307_Closed_Text.style.display='none'; Codehighlighter1_18_307_Open_Image.style.display='inline'; Codehighlighter1_18_307_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_18_307_Closed_Text">/**&nbsp;*/</span><span id="Codehighlighter1_18_307_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;ul&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;li&gt;Title:[ThreeElectricOutlet]&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;li&gt;Description:&nbsp;[三相电插座]&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;li&gt;Copyright&nbsp;2009&nbsp;Upengs&nbsp;Co.,&nbsp;Ltd.&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;li&gt;All&nbsp;right&nbsp;reserved.&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;li&gt;Created&nbsp;by&nbsp;[Huyvanpull]&nbsp;[2011-7-28]&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;li&gt;Midified&nbsp;by&nbsp;[modifier]&nbsp;[modified&nbsp;time]&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;/ul&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;</span><span style="color: #808080">@version</span><span style="color: #008000">&nbsp;1.0&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  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;ThreeElectricOutlet<br /><img id="Codehighlighter1_346_583_Open_Image" onclick="this.style.display='none'; Codehighlighter1_346_583_Open_Text.style.display='none'; Codehighlighter1_346_583_Closed_Image.style.display='inline'; Codehighlighter1_346_583_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_346_583_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_346_583_Closed_Text.style.display='none'; Codehighlighter1_346_583_Open_Image.style.display='inline'; Codehighlighter1_346_583_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_346_583_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_346_583_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br /><img id="Codehighlighter1_355_533_Open_Image" onclick="this.style.display='none'; Codehighlighter1_355_533_Open_Text.style.display='none'; Codehighlighter1_355_533_Closed_Image.style.display='inline'; Codehighlighter1_355_533_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_355_533_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_355_533_Closed_Text.style.display='none'; Codehighlighter1_355_533_Open_Image.style.display='inline'; Codehighlighter1_355_533_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_355_533_Closed_Text">/**&nbsp;*/</span><span id="Codehighlighter1_355_533_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&lt;ul&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&lt;li&gt;Description:[连接三相电]&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&lt;li&gt;Created&nbsp;by&nbsp;[Huyvanpull]&nbsp;[2011-7-28]&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&lt;li&gt;Midified&nbsp;by&nbsp;[modifier]&nbsp;[modified&nbsp;time]&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&lt;/ul&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&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;connectThreeElectricCurrent();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div><br /><br />对象适配器<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;adapter;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  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;TreeElectricAdapter&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;ThreeElectricOutlet<br /><img id="Codehighlighter1_82_417_Open_Image" onclick="this.style.display='none'; Codehighlighter1_82_417_Open_Text.style.display='none'; Codehighlighter1_82_417_Closed_Image.style.display='inline'; Codehighlighter1_82_417_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_82_417_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_82_417_Closed_Text.style.display='none'; Codehighlighter1_82_417_Open_Image.style.display='inline'; Codehighlighter1_82_417_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_82_417_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_82_417_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;TwoElectricOutLet&nbsp;twoElectricOutlet;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;TreeElectricAdapter(TwoElectricOutLet&nbsp;twoElectricOutlet)<br /><img id="Codehighlighter1_202_260_Open_Image" onclick="this.style.display='none'; Codehighlighter1_202_260_Open_Text.style.display='none'; Codehighlighter1_202_260_Closed_Image.style.display='inline'; Codehighlighter1_202_260_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_202_260_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_202_260_Closed_Text.style.display='none'; Codehighlighter1_202_260_Open_Image.style.display='inline'; Codehighlighter1_202_260_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_202_260_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_202_260_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.twoElectricOutlet&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;twoElectricOutlet;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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;connectThreeElectricCurrent()<br /><img id="Codehighlighter1_312_411_Open_Image" onclick="this.style.display='none'; Codehighlighter1_312_411_Open_Text.style.display='none'; Codehighlighter1_312_411_Closed_Image.style.display='inline'; Codehighlighter1_312_411_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_312_411_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_312_411_Closed_Text.style.display='none'; Codehighlighter1_312_411_Open_Image.style.display='inline'; Codehighlighter1_312_411_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_312_411_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_312_411_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(</span><span style="color: #000000">"</span><span style="color: #000000">变压器</span><span style="color: #000000">"</span><span style="color: #000000">);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.twoElectricOutlet.connectTwoElectricCurrent();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div><br /><br />双向适配器:<br />&nbsp;&nbsp;&nbsp; 适配器同时能适配目标接口和被适配接口<br /><br />适配器模式的优点:<br />&nbsp;&nbsp; 1.适配都和被适配者是一种松耦合的关系.<br />&nbsp;&nbsp; 2.符合开闭原则<img src ="http://www.blogjava.net/hwpok/aggbug/355186.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2011-07-28 03:34 <a href="http://www.blogjava.net/hwpok/archive/2011/07/28/355186.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]设计模型探索D-Strategy parttern 之三十六计 </title><link>http://www.blogjava.net/hwpok/archive/2011/07/28/355184.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Wed, 27 Jul 2011 17:31:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2011/07/28/355184.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/355184.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2011/07/28/355184.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/355184.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/355184.html</trackback:ping><description><![CDATA[策略模式<br />&nbsp;&nbsp;&nbsp;&nbsp; 它属于对象行为型模式，主要针对一组算法，将每一个算法封装到具有共同接口的独立的类中，从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。通常，策略模式适用于当一个应用程序需要实现一种特定的服务或者功能，而且该程序有多种实现方式时使用。<br />它由以下几个部份组成:<br />&nbsp;&nbsp;&nbsp; 1.环境对象：该类中实现了对抽象策略中定义的接口或者抽象类的引用。<br />&nbsp;&nbsp;&nbsp; 2.抽象策略对象：它可由接口或抽象类来实现。<br />&nbsp;&nbsp;&nbsp; 3.具体策略对象：它封装了实现同不功能的不同算法。<br />各个组成部份之间的关系为:<br />&nbsp;&nbsp;&nbsp; <img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/hwpok/strategy.jpg" width="613" height="357" /><br />举例:<br />策略接口类:
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;strategy;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img id="Codehighlighter1_19_297_Open_Image" onclick="this.style.display='none'; Codehighlighter1_19_297_Open_Text.style.display='none'; Codehighlighter1_19_297_Closed_Image.style.display='inline'; Codehighlighter1_19_297_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_19_297_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_19_297_Closed_Text.style.display='none'; Codehighlighter1_19_297_Open_Image.style.display='inline'; Codehighlighter1_19_297_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_19_297_Closed_Text">/**&nbsp;*/</span><span id="Codehighlighter1_19_297_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;ul&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;li&gt;Title:[IStrategy]&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;li&gt;Description:&nbsp;[策略接口]&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;li&gt;Copyright&nbsp;2009&nbsp;Upengs&nbsp;Co.,&nbsp;Ltd.&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;li&gt;All&nbsp;right&nbsp;reserved.&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;li&gt;Created&nbsp;by&nbsp;[Huyvanpull]&nbsp;[2011-7-28]&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;li&gt;Midified&nbsp;by&nbsp;[modifier]&nbsp;[modified&nbsp;time]&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;/ul&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;</span><span style="color: #808080">@version</span><span style="color: #008000">&nbsp;1.0&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  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;IStrategy<br /><img id="Codehighlighter1_326_359_Open_Image" onclick="this.style.display='none'; Codehighlighter1_326_359_Open_Text.style.display='none'; Codehighlighter1_326_359_Closed_Image.style.display='inline'; Codehighlighter1_326_359_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_326_359_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_326_359_Closed_Text.style.display='none'; Codehighlighter1_326_359_Open_Image.style.display='inline'; Codehighlighter1_326_359_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_326_359_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_326_359_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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;oparator();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div><br />具体策略类A:<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;strategy;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  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;StrategyA&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;IStrategy<br /><img id="Codehighlighter1_63_144_Open_Image" onclick="this.style.display='none'; Codehighlighter1_63_144_Open_Text.style.display='none'; Codehighlighter1_63_144_Closed_Image.style.display='inline'; Codehighlighter1_63_144_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_63_144_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_63_144_Closed_Text.style.display='none'; Codehighlighter1_63_144_Open_Image.style.display='inline'; Codehighlighter1_63_144_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_63_144_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_63_144_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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;oparator()<br /><img id="Codehighlighter1_97_139_Open_Image" onclick="this.style.display='none'; Codehighlighter1_97_139_Open_Text.style.display='none'; Codehighlighter1_97_139_Closed_Image.style.display='inline'; Codehighlighter1_97_139_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_97_139_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_97_139_Closed_Text.style.display='none'; Codehighlighter1_97_139_Open_Image.style.display='inline'; Codehighlighter1_97_139_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_97_139_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_97_139_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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 /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div><br />具体策略类B:<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;strategy;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  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;StrategyB&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;IStrategy<br /><img id="Codehighlighter1_63_145_Open_Image" onclick="this.style.display='none'; Codehighlighter1_63_145_Open_Text.style.display='none'; Codehighlighter1_63_145_Closed_Image.style.display='inline'; Codehighlighter1_63_145_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_63_145_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_63_145_Closed_Text.style.display='none'; Codehighlighter1_63_145_Open_Image.style.display='inline'; Codehighlighter1_63_145_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_63_145_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_63_145_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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;oparator()<br /><img id="Codehighlighter1_97_139_Open_Image" onclick="this.style.display='none'; Codehighlighter1_97_139_Open_Text.style.display='none'; Codehighlighter1_97_139_Closed_Image.style.display='inline'; Codehighlighter1_97_139_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_97_139_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_97_139_Closed_Text.style.display='none'; Codehighlighter1_97_139_Open_Image.style.display='inline'; Codehighlighter1_97_139_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_97_139_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_97_139_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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 /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div><br />具体策略类C<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;strategy;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  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;StrategyC&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;IStrategy<br /><img id="Codehighlighter1_63_144_Open_Image" onclick="this.style.display='none'; Codehighlighter1_63_144_Open_Text.style.display='none'; Codehighlighter1_63_144_Closed_Image.style.display='inline'; Codehighlighter1_63_144_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_63_144_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_63_144_Closed_Text.style.display='none'; Codehighlighter1_63_144_Open_Image.style.display='inline'; Codehighlighter1_63_144_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_63_144_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_63_144_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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;oparator()<br /><img id="Codehighlighter1_96_138_Open_Image" onclick="this.style.display='none'; Codehighlighter1_96_138_Open_Text.style.display='none'; Codehighlighter1_96_138_Closed_Image.style.display='inline'; Codehighlighter1_96_138_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_96_138_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_96_138_Closed_Text.style.display='none'; Codehighlighter1_96_138_Open_Image.style.display='inline'; Codehighlighter1_96_138_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_96_138_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_96_138_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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 /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div><br /><br />上下文环境类:
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;strategy;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img id="Codehighlighter1_19_296_Open_Image" onclick="this.style.display='none'; Codehighlighter1_19_296_Open_Text.style.display='none'; Codehighlighter1_19_296_Closed_Image.style.display='inline'; Codehighlighter1_19_296_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_19_296_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_19_296_Closed_Text.style.display='none'; Codehighlighter1_19_296_Open_Image.style.display='inline'; Codehighlighter1_19_296_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_19_296_Closed_Text">/**&nbsp;*/</span><span id="Codehighlighter1_19_296_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;ul&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;li&gt;Title:[Context]&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;li&gt;Description:&nbsp;[上下文环境]&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;li&gt;Copyright&nbsp;2009&nbsp;Upengs&nbsp;Co.,&nbsp;Ltd.&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;li&gt;All&nbsp;right&nbsp;reserved.&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;li&gt;Created&nbsp;by&nbsp;[Huyvanpull]&nbsp;[2011-7-28]&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;li&gt;Midified&nbsp;by&nbsp;[modifier]&nbsp;[modified&nbsp;time]&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;&lt;/ul&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;*&nbsp;</span><span style="color: #808080">@version</span><span style="color: #008000">&nbsp;1.0&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  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;Context<br /><img id="Codehighlighter1_319_716_Open_Image" onclick="this.style.display='none'; Codehighlighter1_319_716_Open_Text.style.display='none'; Codehighlighter1_319_716_Closed_Image.style.display='inline'; Codehighlighter1_319_716_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_319_716_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_319_716_Closed_Text.style.display='none'; Codehighlighter1_319_716_Open_Image.style.display='inline'; Codehighlighter1_319_716_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_319_716_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_319_716_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br /><img id="Codehighlighter1_328_336_Open_Image" onclick="this.style.display='none'; Codehighlighter1_328_336_Open_Text.style.display='none'; Codehighlighter1_328_336_Closed_Image.style.display='inline'; Codehighlighter1_328_336_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_328_336_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_328_336_Closed_Text.style.display='none'; Codehighlighter1_328_336_Open_Image.style.display='inline'; Codehighlighter1_328_336_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_328_336_Closed_Text">/**&nbsp;*/</span><span id="Codehighlighter1_328_336_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000">&nbsp;策略&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;IStrategy&nbsp;strategy;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;Context(IStrategy&nbsp;strategy)<br /><img id="Codehighlighter1_418_458_Open_Image" onclick="this.style.display='none'; Codehighlighter1_418_458_Open_Text.style.display='none'; Codehighlighter1_418_458_Closed_Image.style.display='inline'; Codehighlighter1_418_458_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_418_458_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_418_458_Closed_Text.style.display='none'; Codehighlighter1_418_458_Open_Image.style.display='inline'; Codehighlighter1_418_458_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_418_458_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_418_458_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.strategy&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;strategy;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img id="Codehighlighter1_469_644_Open_Image" onclick="this.style.display='none'; Codehighlighter1_469_644_Open_Text.style.display='none'; Codehighlighter1_469_644_Closed_Image.style.display='inline'; Codehighlighter1_469_644_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_469_644_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_469_644_Closed_Text.style.display='none'; Codehighlighter1_469_644_Open_Image.style.display='inline'; Codehighlighter1_469_644_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_469_644_Closed_Text">/**&nbsp;*/</span><span id="Codehighlighter1_469_644_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&lt;ul&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&lt;li&gt;Description:[作战]&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&lt;li&gt;Created&nbsp;by&nbsp;[Huyvanpull]&nbsp;[2011-7-28]&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&lt;li&gt;Midified&nbsp;by&nbsp;[modifier]&nbsp;[modified&nbsp;time]&lt;/li&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&lt;/ul&gt;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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;fight()<br /><img id="Codehighlighter1_674_714_Open_Image" onclick="this.style.display='none'; Codehighlighter1_674_714_Open_Text.style.display='none'; Codehighlighter1_674_714_Closed_Image.style.display='inline'; Codehighlighter1_674_714_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_674_714_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_674_714_Closed_Text.style.display='none'; Codehighlighter1_674_714_Open_Image.style.display='inline'; Codehighlighter1_674_714_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_674_714_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_674_714_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.strategy.oparator();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div><br />测试类:<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;strategy;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  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;Test<br /><img id="Codehighlighter1_37_402_Open_Image" onclick="this.style.display='none'; Codehighlighter1_37_402_Open_Text.style.display='none'; Codehighlighter1_37_402_Closed_Image.style.display='inline'; Codehighlighter1_37_402_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_37_402_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_37_402_Closed_Text.style.display='none'; Codehighlighter1_37_402_Open_Image.style.display='inline'; Codehighlighter1_37_402_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_37_402_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_37_402_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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)<br /><img id="Codehighlighter1_89_400_Open_Image" onclick="this.style.display='none'; Codehighlighter1_89_400_Open_Text.style.display='none'; Codehighlighter1_89_400_Closed_Image.style.display='inline'; Codehighlighter1_89_400_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_89_400_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_89_400_Closed_Text.style.display='none'; Codehighlighter1_89_400_Open_Image.style.display='inline'; Codehighlighter1_89_400_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_89_400_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_89_400_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;我于敌人力量十倍</span><span style="color: #008000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Context&nbsp;context&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Context(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;StrategyA());<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;context.fight();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;我于敌人力量五倍</span><span style="color: #008000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;context&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Context(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;StrategyB());<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;context.fight();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;我于敌人力量一倍</span><span style="color: #008000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;context&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Context(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;StrategyC());<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;context.fight();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div><br />策略模式的优点:<br />&nbsp;&nbsp;&nbsp; 1.提供了一种代替继承的方法,而且既保持了继承的优点,又保持了继承的灵活性.<br />&nbsp;&nbsp;&nbsp;&nbsp;2.封装了算法,使系统更加灵活.<br /><br />策略模式的缺点:<br />&nbsp;&nbsp;&nbsp; 每一个策略增加了一个类,使系统的类会过多. <img src ="http://www.blogjava.net/hwpok/aggbug/355184.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2011-07-28 01:31 <a href="http://www.blogjava.net/hwpok/archive/2011/07/28/355184.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]设计模型探索C3-Observer parttern 之饲机而动</title><link>http://www.blogjava.net/hwpok/archive/2011/07/27/355097.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Tue, 26 Jul 2011 17:11:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2011/07/27/355097.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/355097.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2011/07/27/355097.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/355097.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/355097.html</trackback:ping><description><![CDATA[<div>观察者JDK实现:<br />1.主题
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;observer.jdk;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.Observable;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  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;SubjectImpl&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;Observable<br /><img id="Codehighlighter1_97_207_Open_Image" onclick="this.style.display='none'; Codehighlighter1_97_207_Open_Text.style.display='none'; Codehighlighter1_97_207_Closed_Image.style.display='inline'; Codehighlighter1_97_207_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_97_207_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_97_207_Closed_Text.style.display='none'; Codehighlighter1_97_207_Open_Image.style.display='inline'; Codehighlighter1_97_207_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_97_207_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_97_207_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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;notifying()<br /><img id="Codehighlighter1_134_205_Open_Image" onclick="this.style.display='none'; Codehighlighter1_134_205_Open_Text.style.display='none'; Codehighlighter1_134_205_Closed_Image.style.display='inline'; Codehighlighter1_134_205_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_134_205_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_134_205_Closed_Text.style.display='none'; Codehighlighter1_134_205_Open_Image.style.display='inline'; Codehighlighter1_134_205_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_134_205_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_134_205_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.setChanged();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.notifyObservers(</span><span style="color: #000000">"</span><span style="color: #000000">重要通知</span><span style="color: #000000">"</span><span style="color: #000000">);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div><br /><br />2.观察者<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;observer.jdk;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.Observable;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.Observer;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  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;ObserverImpl&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;Observer<br /><img id="Codehighlighter1_126_365_Open_Image" onclick="this.style.display='none'; Codehighlighter1_126_365_Open_Text.style.display='none'; Codehighlighter1_126_365_Closed_Image.style.display='inline'; Codehighlighter1_126_365_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_126_365_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_126_365_Closed_Text.style.display='none'; Codehighlighter1_126_365_Open_Image.style.display='inline'; Codehighlighter1_126_365_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_126_365_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_126_365_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;name;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;ObserverImpl(String&nbsp;name)<br /><img id="Codehighlighter1_202_234_Open_Image" onclick="this.style.display='none'; Codehighlighter1_202_234_Open_Text.style.display='none'; Codehighlighter1_202_234_Closed_Image.style.display='inline'; Codehighlighter1_202_234_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_202_234_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_202_234_Closed_Text.style.display='none'; Codehighlighter1_202_234_Open_Image.style.display='inline'; Codehighlighter1_202_234_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_202_234_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_202_234_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.name&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;name;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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;update(Observable&nbsp;o,&nbsp;Object&nbsp;arg)<br /><img id="Codehighlighter1_290_363_Open_Image" onclick="this.style.display='none'; Codehighlighter1_290_363_Open_Text.style.display='none'; Codehighlighter1_290_363_Closed_Image.style.display='inline'; Codehighlighter1_290_363_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_290_363_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_290_363_Closed_Text.style.display='none'; Codehighlighter1_290_363_Open_Image.style.display='inline'; Codehighlighter1_290_363_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_290_363_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_290_363_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #0000ff">this</span><span style="color: #000000">.name&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">观察者收到:\</span><span style="color: #000000">""</span><span style="color: #000000">&nbsp;+&nbsp;arg&nbsp;+&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">\</span><span style="color: #000000">""</span><span style="color: #000000">);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div><br />3.测试类<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;observer.jdk;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  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;Test<br /><img id="Codehighlighter1_42_419_Open_Image" onclick="this.style.display='none'; Codehighlighter1_42_419_Open_Text.style.display='none'; Codehighlighter1_42_419_Closed_Image.style.display='inline'; Codehighlighter1_42_419_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_42_419_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_42_419_Closed_Text.style.display='none'; Codehighlighter1_42_419_Open_Image.style.display='inline'; Codehighlighter1_42_419_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_42_419_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_42_419_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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)<br /><img id="Codehighlighter1_94_417_Open_Image" onclick="this.style.display='none'; Codehighlighter1_94_417_Open_Text.style.display='none'; Codehighlighter1_94_417_Closed_Image.style.display='inline'; Codehighlighter1_94_417_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_94_417_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_94_417_Closed_Text.style.display='none'; Codehighlighter1_94_417_Open_Image.style.display='inline'; Codehighlighter1_94_417_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_94_417_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_94_417_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SubjectImpl&nbsp;subject&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;SubjectImpl();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;subject.addObserver(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ObserverImpl(</span><span style="color: #000000">"</span><span style="color: #000000">小赵</span><span style="color: #000000">"</span><span style="color: #000000">));<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;subject.addObserver(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ObserverImpl(</span><span style="color: #000000">"</span><span style="color: #000000">小钱</span><span style="color: #000000">"</span><span style="color: #000000">));<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;subject.addObserver(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ObserverImpl(</span><span style="color: #000000">"</span><span style="color: #000000">小孙</span><span style="color: #000000">"</span><span style="color: #000000">));<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;subject.addObserver(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ObserverImpl(</span><span style="color: #000000">"</span><span style="color: #000000">小李</span><span style="color: #000000">"</span><span style="color: #000000">));<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;subject.notifying();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div></div>  <img src ="http://www.blogjava.net/hwpok/aggbug/355097.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2011-07-27 01:11 <a href="http://www.blogjava.net/hwpok/archive/2011/07/27/355097.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]设计模型探索C2-Observer parttern之饲机而动</title><link>http://www.blogjava.net/hwpok/archive/2011/07/27/355096.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Tue, 26 Jul 2011 17:09:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2011/07/27/355096.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/355096.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2011/07/27/355096.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/355096.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/355096.html</trackback:ping><description><![CDATA[<div>观察模式原生实现:<br />1.主题接口:
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;observer.natives;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  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;Subject<br /><img id="Codehighlighter1_52_139_Open_Image" onclick="this.style.display='none'; Codehighlighter1_52_139_Open_Text.style.display='none'; Codehighlighter1_52_139_Closed_Image.style.display='inline'; Codehighlighter1_52_139_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_52_139_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_52_139_Closed_Text.style.display='none'; Codehighlighter1_52_139_Open_Image.style.display='inline'; Codehighlighter1_52_139_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_52_139_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_52_139_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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;addObserver(Observer&nbsp;observer);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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;notifying();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span></div><br />2.主题实现类:<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;observer.natives;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.ArrayList;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.List;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  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;SubjectImpl&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;Subject<br /><img id="Codehighlighter1_123_445_Open_Image" onclick="this.style.display='none'; Codehighlighter1_123_445_Open_Text.style.display='none'; Codehighlighter1_123_445_Closed_Image.style.display='inline'; Codehighlighter1_123_445_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_123_445_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_123_445_Closed_Text.style.display='none'; Codehighlighter1_123_445_Open_Image.style.display='inline'; Codehighlighter1_123_445_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_123_445_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_123_445_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;List</span><span style="color: #000000">&lt;</span><span style="color: #000000">Observer</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;observerLst&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ArrayList</span><span style="color: #000000">&lt;</span><span style="color: #000000">Observer</span><span style="color: #000000">&gt;</span><span style="color: #000000">();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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;addObserver(Observer&nbsp;observer)<br /><img id="Codehighlighter1_252_293_Open_Image" onclick="this.style.display='none'; Codehighlighter1_252_293_Open_Text.style.display='none'; Codehighlighter1_252_293_Closed_Image.style.display='inline'; Codehighlighter1_252_293_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_252_293_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_252_293_Closed_Text.style.display='none'; Codehighlighter1_252_293_Open_Image.style.display='inline'; Codehighlighter1_252_293_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_252_293_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_252_293_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;observerLst.add(observer);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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;notifying()<br /><img id="Codehighlighter1_332_438_Open_Image" onclick="this.style.display='none'; Codehighlighter1_332_438_Open_Text.style.display='none'; Codehighlighter1_332_438_Closed_Image.style.display='inline'; Codehighlighter1_332_438_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_332_438_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_332_438_Closed_Text.style.display='none'; Codehighlighter1_332_438_Open_Image.style.display='inline'; Codehighlighter1_332_438_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_332_438_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_332_438_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(Observer&nbsp;observer&nbsp;:&nbsp;observerLst)<br /><img id="Codehighlighter1_387_432_Open_Image" onclick="this.style.display='none'; Codehighlighter1_387_432_Open_Text.style.display='none'; Codehighlighter1_387_432_Closed_Image.style.display='inline'; Codehighlighter1_387_432_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_387_432_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_387_432_Closed_Text.style.display='none'; Codehighlighter1_387_432_Open_Image.style.display='inline'; Codehighlighter1_387_432_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_387_432_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_387_432_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;observer.updateData();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span></div><br />3.观察者接口<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;observer.natives;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  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;Observer<br /><img id="Codehighlighter1_53_88_Open_Image" onclick="this.style.display='none'; Codehighlighter1_53_88_Open_Text.style.display='none'; Codehighlighter1_53_88_Closed_Image.style.display='inline'; Codehighlighter1_53_88_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_53_88_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_53_88_Closed_Text.style.display='none'; Codehighlighter1_53_88_Open_Image.style.display='inline'; Codehighlighter1_53_88_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_53_88_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_53_88_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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;updateData();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div><br />4.观察者实现类<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;observer.natives;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  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;ObserverImpl&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;Observer<br /><img id="Codehighlighter1_73_269_Open_Image" onclick="this.style.display='none'; Codehighlighter1_73_269_Open_Text.style.display='none'; Codehighlighter1_73_269_Closed_Image.style.display='inline'; Codehighlighter1_73_269_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_73_269_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_73_269_Closed_Text.style.display='none'; Codehighlighter1_73_269_Open_Image.style.display='inline'; Codehighlighter1_73_269_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_73_269_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_73_269_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;name;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;ObserverImpl(String&nbsp;name)<br /><img id="Codehighlighter1_149_181_Open_Image" onclick="this.style.display='none'; Codehighlighter1_149_181_Open_Text.style.display='none'; Codehighlighter1_149_181_Closed_Image.style.display='inline'; Codehighlighter1_149_181_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_149_181_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_149_181_Closed_Text.style.display='none'; Codehighlighter1_149_181_Open_Image.style.display='inline'; Codehighlighter1_149_181_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_149_181_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_149_181_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.name&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;name;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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;updateData()<br /><img id="Codehighlighter1_217_267_Open_Image" onclick="this.style.display='none'; Codehighlighter1_217_267_Open_Text.style.display='none'; Codehighlighter1_217_267_Closed_Image.style.display='inline'; Codehighlighter1_217_267_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_217_267_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_217_267_Closed_Text.style.display='none'; Codehighlighter1_217_267_Open_Image.style.display='inline'; Codehighlighter1_217_267_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_217_267_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_217_267_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(name&nbsp;</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">);<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div><br />5.测试类<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;observer.natives;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  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;Test<br /><img id="Codehighlighter1_45_418_Open_Image" onclick="this.style.display='none'; Codehighlighter1_45_418_Open_Text.style.display='none'; Codehighlighter1_45_418_Closed_Image.style.display='inline'; Codehighlighter1_45_418_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_45_418_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_45_418_Closed_Text.style.display='none'; Codehighlighter1_45_418_Open_Image.style.display='inline'; Codehighlighter1_45_418_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_45_418_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_45_418_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  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)<br /><img id="Codehighlighter1_97_416_Open_Image" onclick="this.style.display='none'; Codehighlighter1_97_416_Open_Text.style.display='none'; Codehighlighter1_97_416_Closed_Image.style.display='inline'; Codehighlighter1_97_416_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_97_416_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_97_416_Closed_Text.style.display='none'; Codehighlighter1_97_416_Open_Image.style.display='inline'; Codehighlighter1_97_416_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_97_416_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_97_416_Open_Text"><span style="color: #000000">{<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Subject&nbsp;subject&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;SubjectImpl();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;subject.addObserver(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ObserverImpl(</span><span style="color: #000000">"</span><span style="color: #000000">小赵</span><span style="color: #000000">"</span><span style="color: #000000">));<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;subject.addObserver(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ObserverImpl(</span><span style="color: #000000">"</span><span style="color: #000000">小钱</span><span style="color: #000000">"</span><span style="color: #000000">));<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;subject.addObserver(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ObserverImpl(</span><span style="color: #000000">"</span><span style="color: #000000">小孙</span><span style="color: #000000">"</span><span style="color: #000000">));<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;subject.addObserver(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ObserverImpl(</span><span style="color: #000000">"</span><span style="color: #000000">小李</span><span style="color: #000000">"</span><span style="color: #000000">));<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;subject.notifying();<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div></div>  <img src ="http://www.blogjava.net/hwpok/aggbug/355096.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2011-07-27 01:09 <a href="http://www.blogjava.net/hwpok/archive/2011/07/27/355096.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]设计模型探索C1-Observer parttern 之饲机而动</title><link>http://www.blogjava.net/hwpok/archive/2011/07/27/355094.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Tue, 26 Jul 2011 17:05:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2011/07/27/355094.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/355094.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2011/07/27/355094.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/355094.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/355094.html</trackback:ping><description><![CDATA[<div>观察者模式:<br />&nbsp;&nbsp;&nbsp; 定义对象是一种一对多的关系,当一这方的状态发生变化时,多的之方需要得到通知或更新.<br />观察者模式包含以下几个部份:<br />&nbsp;&nbsp;&nbsp; a.主题接口, 此接口是定义一之方的功能,此接口至少应该包含两个方法:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.添加观察者<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.通知观察者<br />&nbsp;&nbsp;&nbsp; b.主题接口实现类<br />&nbsp;&nbsp;&nbsp; c.观察者接口,此接口定义多方的功能,至少应该包含以下功能<br />&nbsp;&nbsp;&nbsp; d.观察者实现类<br /><br />观察者模式的UML图:<br /><img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/hwpok/observer.jpg" width="567" height="336" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<p>观察者与后继动作</p>
<p class="MsoNormal"><span style="font-family: 宋体">&nbsp;&nbsp;&nbsp; 对于观察者而言，除了监视被观察对象之外，更重要的是当发现被观察对象发生改变时应该采取什么样的动作，比如在学校教务系统中，<span lang="EN-US">HeadMaster一旦注意到有新的学生信息被保存成功时，就会调用<span lang="EN-US">sendMail方法发送一封邮件到校长的邮箱中，我们把诸如此类的动作称为后继动作。对于观察者而言，其后继动作可以分为两类：基于&#8220;推数据&#8221;的后继动作和基于&#8220;拉数据&#8221;的后继动作。<br />&nbsp;&nbsp;&nbsp;A.推数据<br /></span></span></span>&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">所谓&#8220;推数据&#8221;，即当被观察对象发生变化时，它将把相关的变化数据以参数的形式传给被观察者。比如，在学校教务系统的观察者模式中，我们使用的就是基于&#8220;推数据&#8221;的后继动作。当<span lang="EN-US">StudentBean的当前对象被保存到数据库后，该对象将作为参数被传入到<span lang="EN-US">update方法中，作为观察者的<span lang="EN-US">HeadMaster将从<span lang="EN-US">update方法的参数中得到需要的数据，形象一点来说，数据是由被观察者&#8220;推&#8221;给观察者的。</span></span></span></span></span></p>
<p class="MsoNormal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">基于&#8220;推数据&#8221;的后继动作的优点在于观察者一方无需考虑数据是如何得到的，只需对得到的数据进行相应的处理即可。此时，观察者与被观察者之间几乎没有什么耦合。</span></p>
<p class="MsoNormal">基于&#8220;推数据&#8221;的后继动作的缺点在于观察者获得数据的形式是被动的，对于同一个观察对象而言，不同观察者想要获得的数据很有可能是不同的，但此时他们将不得不接受由参数传入的一些与自己没有关系的数据。比如，在学校教务系统中，校长可能只想得到学生的学历信息，而教务主任只想得到学生的交费信息，但他们将不得不接受一些与己无关的额外信息。此外，若方法<span lang="EN-US">update的参数发生变化也会对不同观察者的后继动作造成一些影响。<br />&nbsp;&nbsp;&nbsp;&nbsp;B.拉数据<br /></span><span style="font-family: 宋体">&nbsp;&nbsp;&nbsp; 所谓&#8220;拉数据&#8221;，即当被观察对象发生变化时，不是由被观察者把数据传给观察者，而是由观察者主动到被观察对象中来取得数据。形象一点来说，数据是由观察者主动到被观察者中来&#8220;拉&#8221; 的。当然，此时在被观察的对象或接口中需要提供一些方法来供观察者&#8220;拉&#8221;，同时在观察者对象中也需提供一个对被观察对象的引用的属性，由此也造成了观察者与被观察者之间一定程度的耦合。</span></p>
<p><br />观察者模式的效果有以下几个优点：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; （1）观察者模式在被观察者和观察者之间建立一个抽象的耦合。被观察者角色所知道的只是一个具体现察者聚集，每一个具体现察者都符合一个抽象观察者的接口。被观察者并不认识任何一个具体观察者，它只知道它们都有一个共同的接口。由于被观察者和观察者没有紧密地耦合在一起，因此它们可以属于不同的抽象化层次。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; （2）观察者模式支持广播通信。被观察者会向所有的登记过的观察者发出通知。<br />&nbsp;观察者模式有下面的一些缺点：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;（1）如果一个被观察者对象有很多直接和间接的观察者的话，将所有的观察者都通知到会花费很多时间。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; （2）如果在被观察者之间有循环依赖的话，被观察者会触发它们之间进行循环调用，导致系统崩溃。在使用观察考模式时要特别注意这一点。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;（3）如果对观察者的通知是通过另外的线程进行异步投递的话，系统必须保证投递是以自恰的方式进行的。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; （4）虽然观察者模式可以随时使观察者知道所观察的对象发生了变化，但是观察者模式没有相应的机制使观察者知道所观察的对象是怎么发生变化的。</p><br /></div> <img src ="http://www.blogjava.net/hwpok/aggbug/355094.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2011-07-27 01:05 <a href="http://www.blogjava.net/hwpok/archive/2011/07/27/355094.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]设计模型探索B-command parttern之军令如山</title><link>http://www.blogjava.net/hwpok/archive/2011/07/25/354948.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Sun, 24 Jul 2011 18:19:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2011/07/25/354948.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/354948.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2011/07/25/354948.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/354948.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/354948.html</trackback:ping><description><![CDATA[<p><strong>一、 命令（Command）模式</strong></p>
<p>&nbsp;命令（Command）模式属于对象的行为模式【GOF95】。命令模式又称为行动（Action）模式或交易（Transaction）模式。命令模式把一个请求或者操作封装到一个对象中。命令模式允许系统使用不同的请求把客户端参数化，对请求排队或者记录请求日志，可以提供命令的撤销和恢复功能。&nbsp;命令模式是对命令的封装。命令模式把发出命令的责任和执行命令的责任分割开，委派给不同的对象。&nbsp;每一个命令都是一个操作：请求的一方发出请求要求执行一个操作；接收的一方收到请求，并执行操作。命令模式允许请求的一方和接收的一方独立开来，使得请求的一方不必知道接收请求的一方的接口，更不必知道请求是怎么被接收，以及操作是否被执行、何时被执行，以及是怎么被执行的。<br />&nbsp; 宏命令也是一个具体的命令,只不过他调用了一个或多个其它命令,因此执行一个命令时就相当于执行多个命令.<br /></p>
<p><strong>&nbsp;二、 命令模式的结构&nbsp;命令模式的类图如下：&nbsp;</strong></p>
<p><strong><img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/hwpok/command.jpg" width="367" height="385" /><br /></strong></p>
<p>命令模式涉及到五个角色，它们分别是：&nbsp;&nbsp;&nbsp; </p>
<ul><li>命令（Command）角色：声明了一个给所有具体命令类的抽象接口。这是一个抽象角色。 &nbsp;</li><li>具体命令（ConcreteCommand）角色：定义一个接受者和行为之间的弱耦合；实现 Execute()方法，负责调用接收考的相应操作。Execute()方法通常叫做执方法。 &nbsp;</li><li>请求者（Invoker）角色：负责调用命令对象执行请求，相关的方法叫做行动方法。 &nbsp;</li><li>接收者（Receiver）角色：负责具体实施和执行一个请求。任何一个类都可以成为接收者，实施和执行请求的方法叫做行动方法。&nbsp;</li></ul>
<p><strong>三、 玉帝传美猴王上天</strong></p>
<p>&nbsp;命令模式不是新的发明，在美猴王大闹天宫之前就有了。那时玉帝命令太白金星召美猴王上天："金星径入(水帘洞)当中，面南立定道：'我是西方太白金星，奉玉帝招安圣旨，下界请你上大，拜受仙录。'"玉帝是系统的客户端，太白金星是命令的发出者，猴王是命令的接收者，圣旨就是命令。玉帝的这一道命令就是要求猴王到上界报到。玉帝只管发出命令，而不管命令是怎样传达到美猴王的。太白金星负责将圣旨传到，可是美猴王怎么执行圣旨、何时执行圣旨是美猴王自己的事。果不然，不久美猴王就大闹了天宫。&nbsp;这个模拟系统的设计如下：&nbsp;</p>
<p><img alt="" src="http://pic002.cnblogs.com/images/2010/138595/2010102418530221.jpg" /></p>
<p><strong>四、 命令模式的实现</strong></p>
<p>&nbsp;首先命令应当"重"一些还是"轻"一些。在不同的情况下，可以做不同的选择。如果把命令设计得"轻"，那么它只是提供了一个请求者和接收者之间的耦合而己，命令代表请求者实现请求。相反，如果把命令设计的"重"，那么它就应当实现所有的细节，包括请求所代表的操作，而不再需要接收者了。当一个系统没有接收者时，就可以采用这种做法。&nbsp;更常见的是处于最"轻"和最"重"的两个极端之间时情况。命令类动态地决定调用哪一个接收者类。&nbsp;</p>
<p>其次是否支持undo和 redo。如果一个命令类提供一个方法，比如叫 unExecute()，以恢复其操作的效果，那么命令类就可以支持undo 和 redo。具体命令类需要存储状态信息，包括：&nbsp;</p>
<p>1. 接收者对象实际上实施请求所代表的操作；&nbsp;</p>
<p>2. 对接收者对象所作的操作所需要的参数；&nbsp;</p>
<p>3. 接收者类的最初的状态。接收者必须提供适当的方法，使命令类可以通过调用这个方法，以便接收者类恢复原有状态。</p>
<p>&nbsp;如果只需要提供一层的 undo和 redo，那么系统只需要存储最后被执行的那个命令对象。如果需要支持多层的 undo 和redo，那么系统就需要存储曾经被执行过的命令的清单，清单能允许的最大的长度便是系统所支持的undo 和 redo的层数。沿着清单逆着执行清单上的命令的反命令（unExecute()）便是 undo；沿着清单顺着执行清单上的命令便是 redo。</p>
<p><strong>五、 在什么情况下应当使用命令模式</strong></p>
<p>&nbsp;在下面的情况下应当考虑使用命令模式：</p>
<ul><li>&nbsp;1、使用命令模式作为"CallBack"在面向对象系统中的替代。"CallBack"讲的便是先将一个函数登记上，然后在以后调用此函数。&nbsp;</li><li>2、需要在不同的时间指定请求、将请求排队。一个命令对象和原先的请求发出者可以有不同的生命期。换言之，原先的请求发出者可能已经不在了，而命令对象本身仍然是活动的。这时命令的接收者可以是在本地，也可以在网络的另外一个地址。命令对象可以在串行化之后传送到另外一台机器上去。&nbsp;</li><li>3、系统需要支持命令的撤消(undo)。命令对象可以把状态存储起来，等到客户端需要撤销命令所产生的效果时，可以调用 undo()方法，把命令所产生的效果撤销掉。命令对象还可以提供 redo()方法，以供客户端在需要时，再重新实施命令效果。&nbsp;</li><li>4、如果一个系统要将系统中所有的数据更新到日志里，以便在系统崩溃时，可以根据日志里读回所有的数据更新命令，重新调用 Execute()方法一条一条执行这些命令，从而恢复系统在崩溃前所做的数据更新。</li><li>5、一个系统需要支持交易(Transaction)。一个交易结构封装了一组数据更新命令。使用命令模式来实现交易结构可以使系统增加新的交易类型。</li></ul>
<div><strong>六、 使用命令模式的优点和缺点&nbsp;</strong></div>
<div>命令允许请求的一方和接收请求的一方能够独立演化，从而有以下的优点：&nbsp;</div>
<div>
<ol><li>命令模式使新的命令很容易地被加入到系统里。 &nbsp;</li><li>允许接收请求的一方决定是否要否决（Veto）请求。&nbsp;</li><li>&nbsp;能较容易地设计-个命令队列。 &nbsp;</li><li>可以容易地实现对请求的 Undo和 Redo。&nbsp;</li><li>&nbsp;在需要的情况下，可以较容易地将命令记入日志。 &nbsp;</li><li>命令模式把请求一个操作的对象与知道怎么执行一个操作的对象分割开。&nbsp;</li><li>&nbsp;命令类与其他任何别的类一样，可以修改和推广。 &nbsp;</li><li>你可以把命令对象聚合在一起，合成为合成命令。比如宏命令便是合成命令的例子。合成命令是合成模式的应用。&nbsp;</li><li>&nbsp;由于加进新的具体命令类不影响其他的类，因此增加新的具体命令类很容易。&nbsp;</li></ol>
<div>命令模式的缺点如下：</div>
<div>　　使用命令模式会导致某些系统有过多的具体命令类。某些系统可能需要几十个，几百个甚至几千个具体命令类，这会使命令模式在这样的系统里变得不实际</div></div>  <img src ="http://www.blogjava.net/hwpok/aggbug/354948.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2011-07-25 02:19 <a href="http://www.blogjava.net/hwpok/archive/2011/07/25/354948.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]设计模型探索A-singleton pattern之唯我独尊</title><link>http://www.blogjava.net/hwpok/archive/2011/07/24/354923.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Sun, 24 Jul 2011 07:18:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2011/07/24/354923.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/354923.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2011/07/24/354923.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/354923.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/354923.html</trackback:ping><description><![CDATA[1.在何时使用:<br />&nbsp;&nbsp; 在某些情况下,我们只需要一个类只能实例化一个对象,在这种情况下,可以使用单件.<br />２.uml类图<br /><img alt="" src="http://www.blogjava.net/images/blogjava_net/hwpok/singletom.jpg" width="361" height="273" /><br />
<div>３.使用单例模式的好处.<br />&nbsp;&nbsp; 单类的唯一实例由单件类本控制的,所以可以很好地控制只有一个实现.<br />　使用Singleton的好处还在于可以节省内存因为它限制了实例的个数,有利于Java垃圾回收（garbage collection）.<br /><br />4.例子<br />　１）．饿汉式单件,<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img id="Codehighlighter1_0_279_Open_Image" onclick="this.style.display='none'; Codehighlighter1_0_279_Open_Text.style.display='none'; Codehighlighter1_0_279_Closed_Image.style.display='inline'; Codehighlighter1_0_279_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_0_279_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_0_279_Closed_Text.style.display='none'; Codehighlighter1_0_279_Open_Image.style.display='inline'; Codehighlighter1_0_279_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_0_279_Closed_Text">/**&nbsp;*/</span><span id="Codehighlighter1_0_279_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;*&nbsp;&lt;ul&gt;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;*&nbsp;&lt;li&gt;Title:[SingletomA]&lt;/li&gt;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;*&nbsp;&lt;li&gt;Description:&nbsp;[单例]&lt;/li&gt;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;*&nbsp;&lt;li&gt;Copyright&nbsp;2009&nbsp;Upengs&nbsp;Co.,&nbsp;Ltd.&lt;/li&gt;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;*&nbsp;&lt;li&gt;All&nbsp;right&nbsp;reserved.&lt;/li&gt;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;*&nbsp;&lt;li&gt;Created&nbsp;by&nbsp;[Huyvanpull]&nbsp;[2011-7-24]&lt;/li&gt;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;*&nbsp;&lt;li&gt;Midified&nbsp;by&nbsp;[modifier]&nbsp;[modified&nbsp;time]&lt;/li&gt;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;*&nbsp;&lt;/ul&gt;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;*&nbsp;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;*&nbsp;</span><span style="color: #808080">@version</span><span style="color: #008000">&nbsp;1.0<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" />&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;SingletomA<br /><img id="Codehighlighter1_305_490_Open_Image" onclick="this.style.display='none'; Codehighlighter1_305_490_Open_Text.style.display='none'; Codehighlighter1_305_490_Closed_Image.style.display='inline'; Codehighlighter1_305_490_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_305_490_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_305_490_Closed_Text.style.display='none'; Codehighlighter1_305_490_Open_Image.style.display='inline'; Codehighlighter1_305_490_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_305_490_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_305_490_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;SingletomA&nbsp;singletom&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;SingletomA();<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;SingletomA()<br /><img id="Codehighlighter1_401_402_Open_Image" onclick="this.style.display='none'; Codehighlighter1_401_402_Open_Text.style.display='none'; Codehighlighter1_401_402_Closed_Image.style.display='inline'; Codehighlighter1_401_402_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_401_402_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_401_402_Closed_Text.style.display='none'; Codehighlighter1_401_402_Open_Image.style.display='inline'; Codehighlighter1_401_402_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_401_402_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_401_402_Open_Text"><span style="color: #000000">{}</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&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;SingletomA&nbsp;getInstance()<br /><img id="Codehighlighter1_456_488_Open_Image" onclick="this.style.display='none'; Codehighlighter1_456_488_Open_Text.style.display='none'; Codehighlighter1_456_488_Closed_Image.style.display='inline'; Codehighlighter1_456_488_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_456_488_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_456_488_Closed_Text.style.display='none'; Codehighlighter1_456_488_Open_Image.style.display='inline'; Codehighlighter1_456_488_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_456_488_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_456_488_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;singletom;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span></div><br />&nbsp;&nbsp; 2). 懒汉式单件<br />&nbsp; 
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img id="Codehighlighter1_0_280_Open_Image" onclick="this.style.display='none'; Codehighlighter1_0_280_Open_Text.style.display='none'; Codehighlighter1_0_280_Closed_Image.style.display='inline'; Codehighlighter1_0_280_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_0_280_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_0_280_Closed_Text.style.display='none'; Codehighlighter1_0_280_Open_Image.style.display='inline'; Codehighlighter1_0_280_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_0_280_Closed_Text">/**&nbsp;*/</span><span id="Codehighlighter1_0_280_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;*&nbsp;&lt;ul&gt;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;*&nbsp;&lt;li&gt;Title:[SingletomB]&lt;/li&gt;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;*&nbsp;&lt;li&gt;Description:&nbsp;[懒汉式单态]&lt;/li&gt;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;*&nbsp;&lt;li&gt;Copyright&nbsp;2009&nbsp;Upengs&nbsp;Co.,&nbsp;Ltd.&lt;/li&gt;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;*&nbsp;&lt;li&gt;All&nbsp;right&nbsp;reserved.&lt;/li&gt;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;*&nbsp;&lt;li&gt;Created&nbsp;by&nbsp;[Huyvanpull]&nbsp;[2011-7-24]&lt;/li&gt;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;*&nbsp;&lt;li&gt;Midified&nbsp;by&nbsp;[modifier]&nbsp;[modified&nbsp;time]&lt;/li&gt;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;*&nbsp;&lt;/ul&gt;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;*&nbsp;</span><span style="color: #808080">@version</span><span style="color: #008000">&nbsp;1.0&nbsp;&nbsp;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" />&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;SingletomB<br /><img id="Codehighlighter1_306_570_Open_Image" onclick="this.style.display='none'; Codehighlighter1_306_570_Open_Text.style.display='none'; Codehighlighter1_306_570_Closed_Image.style.display='inline'; Codehighlighter1_306_570_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_306_570_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_306_570_Closed_Text.style.display='none'; Codehighlighter1_306_570_Open_Image.style.display='inline'; Codehighlighter1_306_570_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_306_570_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_306_570_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;SingletomB&nbsp;singletom;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;SingletomB()<br /><img id="Codehighlighter1_388_389_Open_Image" onclick="this.style.display='none'; Codehighlighter1_388_389_Open_Text.style.display='none'; Codehighlighter1_388_389_Closed_Image.style.display='inline'; Codehighlighter1_388_389_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_388_389_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_388_389_Closed_Text.style.display='none'; Codehighlighter1_388_389_Open_Image.style.display='inline'; Codehighlighter1_388_389_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_388_389_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_388_389_Open_Text"><span style="color: #000000">{}</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&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;SingletomB&nbsp;getInstance()<br /><img id="Codehighlighter1_443_568_Open_Image" onclick="this.style.display='none'; Codehighlighter1_443_568_Open_Text.style.display='none'; Codehighlighter1_443_568_Closed_Image.style.display='inline'; Codehighlighter1_443_568_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_443_568_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_443_568_Closed_Text.style.display='none'; Codehighlighter1_443_568_Open_Image.style.display='inline'; Codehighlighter1_443_568_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_443_568_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_443_568_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(singletom&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)<br /><img id="Codehighlighter1_484_536_Open_Image" onclick="this.style.display='none'; Codehighlighter1_484_536_Open_Text.style.display='none'; Codehighlighter1_484_536_Closed_Image.style.display='inline'; Codehighlighter1_484_536_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_484_536_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_484_536_Closed_Text.style.display='none'; Codehighlighter1_484_536_Open_Image.style.display='inline'; Codehighlighter1_484_536_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_484_536_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_484_536_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;singletom&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;SingletomB();<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;singletom;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span></div></div>&nbsp;&nbsp;&nbsp;&nbsp; 这个单例模式是不安全的，为什么说呢 ？因为没考虑多线程，如下情况<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread 1 调用getInstance() 方法，并且判断instance是null，然後进入if模块，在实例化instance之前，Thread 2抢占了Thread 1的cpu。Thread 2 调用getInstance() 方法，并且判断instance是null，然後进入if模块，Thread 2 实例化instance 完成，返回Thread 1 再次实例化instance<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 这个单例已经不在是单例<br />&nbsp;<br />3).线程安全式单态<br />&nbsp;&nbsp;&nbsp; 
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img id="Codehighlighter1_0_280_Open_Image" onclick="this.style.display='none'; Codehighlighter1_0_280_Open_Text.style.display='none'; Codehighlighter1_0_280_Closed_Image.style.display='inline'; Codehighlighter1_0_280_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_0_280_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_0_280_Closed_Text.style.display='none'; Codehighlighter1_0_280_Open_Image.style.display='inline'; Codehighlighter1_0_280_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_0_280_Closed_Text">/**&nbsp;*/</span><span id="Codehighlighter1_0_280_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;*&nbsp;&lt;ul&gt;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;*&nbsp;&lt;li&gt;Title:[SingletomB]&lt;/li&gt;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;*&nbsp;&lt;li&gt;Description:&nbsp;[懒汉式单态]&lt;/li&gt;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;*&nbsp;&lt;li&gt;Copyright&nbsp;2009&nbsp;Upengs&nbsp;Co.,&nbsp;Ltd.&lt;/li&gt;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;*&nbsp;&lt;li&gt;All&nbsp;right&nbsp;reserved.&lt;/li&gt;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;*&nbsp;&lt;li&gt;Created&nbsp;by&nbsp;[Huyvanpull]&nbsp;[2011-7-24]&lt;/li&gt;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;*&nbsp;&lt;li&gt;Midified&nbsp;by&nbsp;[modifier]&nbsp;[modified&nbsp;time]&lt;/li&gt;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;*&nbsp;&lt;/ul&gt;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;*&nbsp;</span><span style="color: #808080">@version</span><span style="color: #008000">&nbsp;1.0&nbsp;&nbsp;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" />&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;SingletomB<br /><img id="Codehighlighter1_306_583_Open_Image" onclick="this.style.display='none'; Codehighlighter1_306_583_Open_Text.style.display='none'; Codehighlighter1_306_583_Closed_Image.style.display='inline'; Codehighlighter1_306_583_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_306_583_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_306_583_Closed_Text.style.display='none'; Codehighlighter1_306_583_Open_Image.style.display='inline'; Codehighlighter1_306_583_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_306_583_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_306_583_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;SingletomB&nbsp;singletom;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;SingletomB()<br /><img id="Codehighlighter1_388_389_Open_Image" onclick="this.style.display='none'; Codehighlighter1_388_389_Open_Text.style.display='none'; Codehighlighter1_388_389_Closed_Image.style.display='inline'; Codehighlighter1_388_389_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_388_389_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_388_389_Closed_Text.style.display='none'; Codehighlighter1_388_389_Open_Image.style.display='inline'; Codehighlighter1_388_389_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_388_389_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_388_389_Open_Text"><span style="color: #000000">{}</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">synchronized</span><span style="color: #000000">&nbsp;SingletomB&nbsp;getInstance()<br /><img id="Codehighlighter1_456_581_Open_Image" onclick="this.style.display='none'; Codehighlighter1_456_581_Open_Text.style.display='none'; Codehighlighter1_456_581_Closed_Image.style.display='inline'; Codehighlighter1_456_581_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_456_581_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_456_581_Closed_Text.style.display='none'; Codehighlighter1_456_581_Open_Image.style.display='inline'; Codehighlighter1_456_581_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_456_581_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_456_581_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(singletom&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)<br /><img id="Codehighlighter1_497_549_Open_Image" onclick="this.style.display='none'; Codehighlighter1_497_549_Open_Text.style.display='none'; Codehighlighter1_497_549_Closed_Image.style.display='inline'; Codehighlighter1_497_549_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_497_549_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_497_549_Closed_Text.style.display='none'; Codehighlighter1_497_549_Open_Image.style.display='inline'; Codehighlighter1_497_549_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_497_549_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_497_549_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;singletom&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;SingletomB();<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;singletom;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span></div>采用同步来解决，这种方式解决了问题，但是仔细分析正常的情况下只有第一次时候，进入对象的实例化，须要同步，其它时候都是直接返回已经实例化好的instance不须要同步，大家都知到在一个多线程的程序中，如果同步的消耗是很大的，很容易造成瓶颈.<br /><br />4.改进型<br />利用Double-checked locking 两次同步，中间变量,解决上边的问题。<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img id="Codehighlighter1_0_282_Open_Image" onclick="this.style.display='none'; Codehighlighter1_0_282_Open_Text.style.display='none'; Codehighlighter1_0_282_Closed_Image.style.display='inline'; Codehighlighter1_0_282_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_0_282_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_0_282_Closed_Text.style.display='none'; Codehighlighter1_0_282_Open_Image.style.display='inline'; Codehighlighter1_0_282_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_0_282_Closed_Text">/**&nbsp;*/</span><span id="Codehighlighter1_0_282_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;*&nbsp;&lt;ul&gt;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;*&nbsp;&lt;li&gt;Title:[SingletomB]&lt;/li&gt;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;*&nbsp;&lt;li&gt;Description:&nbsp;[懒汉式单态]&lt;/li&gt;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;*&nbsp;&lt;li&gt;Copyright&nbsp;2009&nbsp;Upengs&nbsp;Co.,&nbsp;Ltd.&lt;/li&gt;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;*&nbsp;&lt;li&gt;All&nbsp;right&nbsp;reserved.&lt;/li&gt;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;*&nbsp;&lt;li&gt;Created&nbsp;by&nbsp;[Huyvanpull]&nbsp;[2011-7-24]&lt;/li&gt;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;*&nbsp;&lt;li&gt;Midified&nbsp;by&nbsp;[modifier]&nbsp;[modified&nbsp;time]&lt;/li&gt;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;*&nbsp;&lt;/ul&gt;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;*&nbsp;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;*&nbsp;</span><span style="color: #808080">@version</span><span style="color: #008000">&nbsp;1.0<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" />&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;SingletomB<br /><img id="Codehighlighter1_308_691_Open_Image" onclick="this.style.display='none'; Codehighlighter1_308_691_Open_Text.style.display='none'; Codehighlighter1_308_691_Closed_Image.style.display='inline'; Codehighlighter1_308_691_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_308_691_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_308_691_Closed_Text.style.display='none'; Codehighlighter1_308_691_Open_Image.style.display='inline'; Codehighlighter1_308_691_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_308_691_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_308_691_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;SingletomB&nbsp;singletom;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;SingletomB()<br /><img id="Codehighlighter1_390_391_Open_Image" onclick="this.style.display='none'; Codehighlighter1_390_391_Open_Text.style.display='none'; Codehighlighter1_390_391_Closed_Image.style.display='inline'; Codehighlighter1_390_391_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_390_391_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_390_391_Closed_Text.style.display='none'; Codehighlighter1_390_391_Open_Image.style.display='inline'; Codehighlighter1_390_391_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_390_391_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_390_391_Open_Text"><span style="color: #000000">{}</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&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;SingletomB&nbsp;getInstance()<br /><img id="Codehighlighter1_445_689_Open_Image" onclick="this.style.display='none'; Codehighlighter1_445_689_Open_Text.style.display='none'; Codehighlighter1_445_689_Closed_Image.style.display='inline'; Codehighlighter1_445_689_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_445_689_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_445_689_Closed_Text.style.display='none'; Codehighlighter1_445_689_Open_Image.style.display='inline'; Codehighlighter1_445_689_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_445_689_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_445_689_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(singletom&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)<br /><img id="Codehighlighter1_486_657_Open_Image" onclick="this.style.display='none'; Codehighlighter1_486_657_Open_Text.style.display='none'; Codehighlighter1_486_657_Closed_Image.style.display='inline'; Codehighlighter1_486_657_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_486_657_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_486_657_Closed_Text.style.display='none'; Codehighlighter1_486_657_Open_Image.style.display='inline'; Codehighlighter1_486_657_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_486_657_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_486_657_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">synchronized</span><span style="color: #000000">&nbsp;(SingletomB.</span><span style="color: #0000ff">class</span><span style="color: #000000">)<br /><img id="Codehighlighter1_544_647_Open_Image" onclick="this.style.display='none'; Codehighlighter1_544_647_Open_Text.style.display='none'; Codehighlighter1_544_647_Closed_Image.style.display='inline'; Codehighlighter1_544_647_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="display: none" id="Codehighlighter1_544_647_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_544_647_Closed_Text.style.display='none'; Codehighlighter1_544_647_Open_Image.style.display='inline'; Codehighlighter1_544_647_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_544_647_Closed_Text"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_544_647_Open_Text"><span style="color: #000000">{<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&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">&nbsp;(singletom&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;singletom&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;SingletomB();<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;singletom;<br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br /><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span></div>  <img src ="http://www.blogjava.net/hwpok/aggbug/354923.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2011-07-24 15:18 <a href="http://www.blogjava.net/hwpok/archive/2011/07/24/354923.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>面对对象类与类的几中关系</title><link>http://www.blogjava.net/hwpok/archive/2011/07/24/354918.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Sun, 24 Jul 2011 05:34:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2011/07/24/354918.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/354918.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2011/07/24/354918.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/354918.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/354918.html</trackback:ping><description><![CDATA[<div>关系的强弱</div><div>泛化=实现&gt;组合&gt;聚合&gt;关联&gt;依赖</div><div></div><div>1. 泛化</div><div>&nbsp; &nbsp; &nbsp; 1). 是一种继承关系, 表示一般与特殊的关系</div><div>&nbsp; &nbsp; &nbsp; 2). 代码体现为对父类的继承</div><div>&nbsp; &nbsp; &nbsp; 3). 用直线空心三角箭头表示, 箭头指向父类</div><div></div><div>2. 实现</div><div>&nbsp; &nbsp; &nbsp; 1). 是类与接口之间的关系</div><div>&nbsp; &nbsp; &nbsp; 2). 代码体现为实现接口</div><div>&nbsp; &nbsp; &nbsp; 3). 用虚线空心三角箭头表示, 箭头指向接口</div><div></div><div>3. 组合</div><div>&nbsp; &nbsp; &nbsp; 1). 部份和整体之间的关系,部份不能独立于整体独立存在, 如公司和部门之关的关系,</div><div>&nbsp; &nbsp; &nbsp; 2). 代码体现为成员变量</div><div>&nbsp; &nbsp; &nbsp; 3). 实线箭头实心菱形,菱形指向整体</div><div></div><div>4. 聚合</div><div>&nbsp; &nbsp; &nbsp; 1). 是整体与部分的关系,且部分可以离开整体而单独存在.如车和轮胎是整体和部分的关系,轮胎离开车仍然可以存在</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 聚合关系是关联关系的一种,是强的关联关系,关联和聚合在语法上无法区分,必须考察具体的逻辑关系</div><div>&nbsp; &nbsp; &nbsp; 2). 代码体现为成员变量</div><div>&nbsp; &nbsp; &nbsp; 3). 带空心菱形的实心箭头线,菱形指向整体</div><div></div><div>5. 关联</div><div>&nbsp; &nbsp; &nbsp; 1). 是一种拥有关系,它使一个类知道另一个类的属性和方法</div><div>&nbsp; &nbsp; &nbsp; 2). 代码体现为成员变量</div><div>&nbsp; &nbsp; &nbsp; 3). 带普通箭头的实心箭头线，指向被拥有者</div><div></div><div>6. 依赖</div><div>&nbsp; &nbsp; &nbsp; 1). 是一种使用的关系,即一个类的实现需要另一个类的协助,所以要尽量不使用双向的互相依赖</div><div>&nbsp; &nbsp; &nbsp; 2). 局部变量,方法的参数或者对静态方法的调用</div><div>&nbsp; &nbsp; &nbsp; 3). 带箭头的虚箭头线,指向被使用者</div><div>&nbsp; &nbsp; &nbsp;&nbsp;</div><img src ="http://www.blogjava.net/hwpok/aggbug/354918.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2011-07-24 13:34 <a href="http://www.blogjava.net/hwpok/archive/2011/07/24/354918.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java 面对对象的几个基本的原则</title><link>http://www.blogjava.net/hwpok/archive/2011/07/23/354901.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Sat, 23 Jul 2011 08:26:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2011/07/23/354901.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/354901.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2011/07/23/354901.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/354901.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/354901.html</trackback:ping><description><![CDATA[<div>1.abstract-oriented<br />&nbsp;&nbsp; 面向抽象原则<br />&nbsp;&nbsp;&nbsp;我的理解就是把程序的功能抽象成接口，面向接口编程。<br />2.open-close principle<br />&nbsp;&nbsp; 开-闭原则<br />&nbsp;&nbsp; 让设计对扩展开发，对修改关闭。<br />&nbsp;&nbsp; 如果针遵守开闭原则，那么这个设计一定是易于维护，因为增加新模块的时候，不必更改核心模块<br />3.多用组合，少用继承<br />&nbsp;&nbsp; 方法复用有两种技术，一种是继承，另一种组合。<br />&nbsp;&nbsp; 继承的缺点：<br />&nbsp;&nbsp; 1.子类和父类是强耦合关系，父类发生变化，可能会导致子类发生变化。<br />&nbsp;&nbsp;&nbsp;2.无法在运行期间改变从父类继承的方法的行为。<br />&nbsp;&nbsp;&nbsp;3.是一种白盒复用<br />&nbsp; 组合是把其它类作为一个成员变量构成自己的组成部<br />&nbsp; 组合的优点：<br />&nbsp;&nbsp;&nbsp; 1.是一种黑盒复用<br />&nbsp;&nbsp;&nbsp; 2.在运行期间可以动态指定包含的对象<br />4.高内聚，低耦合-<br />&nbsp;&nbsp; 内聚是指内容相关的行为放在一个类里。就是一个类应该有自己应该具备的功能。<br />&nbsp;&nbsp; 耦合是指类与类之间的相交。<br />&nbsp;&nbsp; 这样做的好处是修改系统的不部份功能，不至于影响其它部份。<br /><br />&nbsp;&nbsp;<br />&nbsp;&nbsp; </div><img src ="http://www.blogjava.net/hwpok/aggbug/354901.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2011-07-23 16:26 <a href="http://www.blogjava.net/hwpok/archive/2011/07/23/354901.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>设计模式  概论</title><link>http://www.blogjava.net/hwpok/archive/2011/07/23/354898.html</link><dc:creator>惠万鹏</dc:creator><author>惠万鹏</author><pubDate>Sat, 23 Jul 2011 07:38:00 GMT</pubDate><guid>http://www.blogjava.net/hwpok/archive/2011/07/23/354898.html</guid><wfw:comment>http://www.blogjava.net/hwpok/comments/354898.html</wfw:comment><comments>http://www.blogjava.net/hwpok/archive/2011/07/23/354898.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hwpok/comments/commentRss/354898.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hwpok/services/trackbacks/354898.html</trackback:ping><description><![CDATA[设计模式是针对同一类问题的最佳解决方案。<br /><br />一.理解设计模式了解它的4个要素：<br />1.名称，它高度概扩了该模式的本质<br />2.问题，它描述了应该在何种情况下使用该模式<br />3.方案，它描述了该模式的由哪一些部份组成，以及各个部份的职责，以及各部份之间的关系<br />4.影响，它包括使用该设计模式对系统的灵活性，扩展性，复用性之间的影响。<br /><br />二.使用设计模式应该注意两点<br />1.正确使用<br />2.避免教条<br /><br /><img src ="http://www.blogjava.net/hwpok/aggbug/354898.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hwpok/" target="_blank">惠万鹏</a> 2011-07-23 15:38 <a href="http://www.blogjava.net/hwpok/archive/2011/07/23/354898.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>