﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-每个人都会死去，但不是每个人都曾经真正活过-文章分类-设计模式</title><link>http://www.blogjava.net/saftyfirst/category/15080.html</link><description>Ever man dies,Not every man really lives</description><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 18:07:23 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 18:07:23 GMT</pubDate><ttl>60</ttl><item><title>设计模式学习之（Head First Design Patterns）------装饰模式</title><link>http://www.blogjava.net/saftyfirst/articles/70374.html</link><dc:creator>saftyfirst</dc:creator><author>saftyfirst</author><pubDate>Mon, 18 Sep 2006 12:44:00 GMT</pubDate><guid>http://www.blogjava.net/saftyfirst/articles/70374.html</guid><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Decorator		      The Decorator pattern attaches additional responsibilities to an object dynamically . Decorator provide a flexible alternative to subclass for extending functionality .      装饰模式能进行...&nbsp;&nbsp;<a href='http://www.blogjava.net/saftyfirst/articles/70374.html'>阅读全文</a><img src ="http://www.blogjava.net/saftyfirst/aggbug/70374.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/saftyfirst/" target="_blank">saftyfirst</a> 2006-09-18 20:44 <a href="http://www.blogjava.net/saftyfirst/articles/70374.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>设计模式学习之（Head First Design Patterns）------观察者模式</title><link>http://www.blogjava.net/saftyfirst/articles/69222.html</link><dc:creator>saftyfirst</dc:creator><author>saftyfirst</author><pubDate>Tue, 12 Sep 2006 11:56:00 GMT</pubDate><guid>http://www.blogjava.net/saftyfirst/articles/69222.html</guid><description><![CDATA[
		<p align="center">   <font size="5">OBSERVER</font></p>      The Observer Pattern defines a one-to-many dependency between object so that when one object changes state ,all <br />of its dependents are notified and update automatically.<br />      观察者模式在对象间定义了一个一对多的关系，当一个对象（Subject 主题对象）发生改变时,所有依赖于该对象的对象都会被通知并且自动更新。<br />      <br />      The Observer Pattern provides an object design where subject and observer are loosely coupled:<br />      <br />         1&gt; The only thing the subject knows about an observer is that it implement a certain interface.<br />         2&gt; We can add new observer at any time.<br />         3&gt; We never need to modify the subject to add new type of observers.<br />         4&gt; Changes to either the subject or an observer will not affect other.<br />以下是测试代码<br />ProductObservable <br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id="Codehighlighter1_0_151_Open_Image" onclick="this.style.display='none'; Codehighlighter1_0_151_Open_Text.style.display='none'; Codehighlighter1_0_151_Closed_Image.style.display='inline'; Codehighlighter1_0_151_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_0_151_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_0_151_Closed_Text.style.display='none'; Codehighlighter1_0_151_Open_Image.style.display='inline'; Codehighlighter1_0_151_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span id="Codehighlighter1_0_151_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/** */</span><span id="Codehighlighter1_0_151_Open_Text"><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * </span><span style="COLOR: #808080">@author</span><span style="COLOR: #008000"> Wangzg<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * Time: 2006-9-12<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * FileName: ProductObservable.java<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * PackageName: src.observerPattern    <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * Description: Observable class  <br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /> </span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> src.observerPattern;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> java.util.Observable;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_263_628_Open_Image" onclick="this.style.display='none'; Codehighlighter1_263_628_Open_Text.style.display='none'; Codehighlighter1_263_628_Closed_Image.style.display='inline'; Codehighlighter1_263_628_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_263_628_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_263_628_Closed_Text.style.display='none'; Codehighlighter1_263_628_Open_Image.style.display='inline'; Codehighlighter1_263_628_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> ProductObservable </span><span style="COLOR: #0000ff">extends</span><span style="COLOR: #000000"> Observable </span><span id="Codehighlighter1_263_628_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_263_628_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> String name;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000"> weigh;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_337_355_Open_Image" onclick="this.style.display='none'; Codehighlighter1_337_355_Open_Text.style.display='none'; Codehighlighter1_337_355_Closed_Image.style.display='inline'; Codehighlighter1_337_355_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_337_355_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_337_355_Closed_Text.style.display='none'; Codehighlighter1_337_355_Open_Image.style.display='inline'; Codehighlighter1_337_355_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> String getName() </span><span id="Codehighlighter1_337_355_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_337_355_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> name;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_392_456_Open_Image" onclick="this.style.display='none'; Codehighlighter1_392_456_Open_Text.style.display='none'; Codehighlighter1_392_456_Closed_Image.style.display='inline'; Codehighlighter1_392_456_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_392_456_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_392_456_Closed_Text.style.display='none'; Codehighlighter1_392_456_Open_Image.style.display='inline'; Codehighlighter1_392_456_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> setName(String name) </span><span id="Codehighlighter1_392_456_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_392_456_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.name </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> name;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        setChanged();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        notifyObservers(name);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_485_504_Open_Image" onclick="this.style.display='none'; Codehighlighter1_485_504_Open_Text.style.display='none'; Codehighlighter1_485_504_Closed_Image.style.display='inline'; Codehighlighter1_485_504_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_485_504_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_485_504_Closed_Text.style.display='none'; Codehighlighter1_485_504_Open_Image.style.display='inline'; Codehighlighter1_485_504_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000"> getWeigh() </span><span id="Codehighlighter1_485_504_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_485_504_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> weigh;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_543_622_Open_Image" onclick="this.style.display='none'; Codehighlighter1_543_622_Open_Text.style.display='none'; Codehighlighter1_543_622_Closed_Image.style.display='inline'; Codehighlighter1_543_622_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_543_622_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_543_622_Closed_Text.style.display='none'; Codehighlighter1_543_622_Open_Image.style.display='inline'; Codehighlighter1_543_622_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> setWeigh(</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000"> weigh) </span><span id="Codehighlighter1_543_622_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_543_622_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.weigh </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> weigh;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        setChanged();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        notifyObservers(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Double(weigh));<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    <br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div><br />ProductNameobserver <br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000"><br /><img id="Codehighlighter1_3_159_Open_Image" onclick="this.style.display='none'; Codehighlighter1_3_159_Open_Text.style.display='none'; Codehighlighter1_3_159_Closed_Image.style.display='inline'; Codehighlighter1_3_159_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_3_159_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_3_159_Closed_Text.style.display='none'; Codehighlighter1_3_159_Open_Image.style.display='inline'; Codehighlighter1_3_159_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />  </span><span id="Codehighlighter1_3_159_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/** */</span><span id="Codehighlighter1_3_159_Open_Text"><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  * </span><span style="COLOR: #808080">@author</span><span style="COLOR: #008000"> Wangzg<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  * Time: 2006-9-12<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  * FileName: ProductNameobserver.java<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  * PackageName: src.observerPattern    <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />  * Description: Observer class <br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />  </span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />  </span><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> src.observerPattern;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> java.util.Observable;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> java.util.Observer;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_303_720_Open_Image" onclick="this.style.display='none'; Codehighlighter1_303_720_Open_Text.style.display='none'; Codehighlighter1_303_720_Closed_Image.style.display='inline'; Codehighlighter1_303_720_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_303_720_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_303_720_Closed_Text.style.display='none'; Codehighlighter1_303_720_Open_Image.style.display='inline'; Codehighlighter1_303_720_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> ProductNameobserver </span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000"> Observer </span><span id="Codehighlighter1_303_720_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_303_720_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> String name </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000"> ;<br /><img id="Codehighlighter1_336_455_Open_Image" onclick="this.style.display='none'; Codehighlighter1_336_455_Open_Text.style.display='none'; Codehighlighter1_336_455_Closed_Image.style.display='inline'; Codehighlighter1_336_455_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_336_455_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_336_455_Closed_Text.style.display='none'; Codehighlighter1_336_455_Open_Image.style.display='inline'; Codehighlighter1_336_455_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span id="Codehighlighter1_336_455_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id="Codehighlighter1_336_455_Open_Text"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * @author Wangzg<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * Time: 2006-9-12<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * MethodsName: <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * variable in  :<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * variable out :<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * Description: <br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />     </span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br /><img id="Codehighlighter1_503_717_Open_Image" onclick="this.style.display='none'; Codehighlighter1_503_717_Open_Text.style.display='none'; Codehighlighter1_503_717_Closed_Image.style.display='inline'; Codehighlighter1_503_717_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_503_717_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_503_717_Closed_Text.style.display='none'; Codehighlighter1_503_717_Open_Image.style.display='inline'; Codehighlighter1_503_717_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> update(Observable o, Object arg) </span><span id="Codehighlighter1_503_717_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_503_717_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> TODO Auto-generated method stub</span><span style="COLOR: #008000"><br /><img id="Codehighlighter1_580_654_Open_Image" onclick="this.style.display='none'; Codehighlighter1_580_654_Open_Text.style.display='none'; Codehighlighter1_580_654_Closed_Image.style.display='inline'; Codehighlighter1_580_654_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_580_654_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_580_654_Closed_Text.style.display='none'; Codehighlighter1_580_654_Open_Image.style.display='inline'; Codehighlighter1_580_654_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> ( arg </span><span style="COLOR: #0000ff">instanceof</span><span style="COLOR: #000000"> String)</span><span id="Codehighlighter1_580_654_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_580_654_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            name </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> (String)arg;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">name change to </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">name);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">ProductNameobserver nothing happen</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div><br />ProductWeighObserver <br />       
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id="Codehighlighter1_0_151_Open_Image" onclick="this.style.display='none'; Codehighlighter1_0_151_Open_Text.style.display='none'; Codehighlighter1_0_151_Closed_Image.style.display='inline'; Codehighlighter1_0_151_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_0_151_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_0_151_Closed_Text.style.display='none'; Codehighlighter1_0_151_Open_Image.style.display='inline'; Codehighlighter1_0_151_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span id="Codehighlighter1_0_151_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/** */</span><span id="Codehighlighter1_0_151_Open_Text"><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * </span><span style="COLOR: #808080">@author</span><span style="COLOR: #008000"> Wangzg<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * Time: 2006-9-12<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * FileName: ProductWeighObserver.java<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * PackageName: src.observerPattern    <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> * Description: Observer class <br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /> </span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000"> src.observerPattern;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> java.util.Observable;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> java.util.Observer;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_294_713_Open_Image" onclick="this.style.display='none'; Codehighlighter1_294_713_Open_Text.style.display='none'; Codehighlighter1_294_713_Closed_Image.style.display='inline'; Codehighlighter1_294_713_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_294_713_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_294_713_Closed_Text.style.display='none'; Codehighlighter1_294_713_Open_Image.style.display='inline'; Codehighlighter1_294_713_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> ProductWeighObserver </span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000"> Observer </span><span id="Codehighlighter1_294_713_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_294_713_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">dou<font color="#000000">Double</font>ble</span><span style="COLOR: #000000"> weigh </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0.0</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_327_427_Open_Image" onclick="this.style.display='none'; Codehighlighter1_327_427_Open_Text.style.display='none'; Codehighlighter1_327_427_Closed_Image.style.display='inline'; Codehighlighter1_327_427_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_327_427_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_327_427_Closed_Text.style.display='none'; Codehighlighter1_327_427_Open_Image.style.display='inline'; Codehighlighter1_327_427_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span id="Codehighlighter1_327_427_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id="Codehighlighter1_327_427_Open_Text"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * @author Wangzg Time: 2006-9-12 MethodsName: variable in : variable out :<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * Description:<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />     </span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br /><img id="Codehighlighter1_475_710_Open_Image" onclick="this.style.display='none'; Codehighlighter1_475_710_Open_Text.style.display='none'; Codehighlighter1_475_710_Closed_Image.style.display='inline'; Codehighlighter1_475_710_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_475_710_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_475_710_Closed_Text.style.display='none'; Codehighlighter1_475_710_Open_Image.style.display='inline'; Codehighlighter1_475_710_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> update(Observable o, Object arg) </span><span id="Codehighlighter1_475_710_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_475_710_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> TODO Auto-generated method stub</span><span style="COLOR: #008000"><br /><img id="Codehighlighter1_553_646_Open_Image" onclick="this.style.display='none'; Codehighlighter1_553_646_Open_Text.style.display='none'; Codehighlighter1_553_646_Closed_Image.style.display='inline'; Codehighlighter1_553_646_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_553_646_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_553_646_Closed_Text.style.display='none'; Codehighlighter1_553_646_Open_Image.style.display='inline'; Codehighlighter1_553_646_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /></span><span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> ( arg </span><span style="COLOR: #0000ff">instanceof</span><span style="COLOR: #000000"> ProductObservable )</span><span id="Codehighlighter1_553_646_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_553_646_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            weigh </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> ((Double)arg).doubleValue();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">weigh change to </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">weigh);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        System.out.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">ProductWeighObserver nothing happen</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div><br /><img src ="http://www.blogjava.net/saftyfirst/aggbug/69222.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/saftyfirst/" target="_blank">saftyfirst</a> 2006-09-12 19:56 <a href="http://www.blogjava.net/saftyfirst/articles/69222.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>设计模式学习之（Head First Design Patterns）------策略模式</title><link>http://www.blogjava.net/saftyfirst/articles/69023.html</link><dc:creator>saftyfirst</dc:creator><author>saftyfirst</author><pubDate>Mon, 11 Sep 2006 12:33:00 GMT</pubDate><guid>http://www.blogjava.net/saftyfirst/articles/69023.html</guid><description><![CDATA[
		<p align="center">
				<font size="5">STRATEGY<br /></font>
		</p>         define a family of algorithms , encapsulats each ones , and make them interchangeable . STRATEGY let the algorithm vary independently from client that use it .<br />         <br />         定义一系列算法并逐个封装为单独的类 ，并且使之能互相交换。策略模式能使这些各种各样的算法独立的被客户端调用。（呵呵   翻译的可能不标准）<br /><br />           separating what changes from what stay the same .<br /><br />           identify the aspects of your application taht vary ang separate them from what stay the same.<br /><br />           Has-a can be better than Is-a.   <img src ="http://www.blogjava.net/saftyfirst/aggbug/69023.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/saftyfirst/" target="_blank">saftyfirst</a> 2006-09-11 20:33 <a href="http://www.blogjava.net/saftyfirst/articles/69023.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>