﻿<?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-jedikings-随笔分类-Design Patterns </title><link>http://www.blogjava.net/jedikings/category/12126.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 07:42:44 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 07:42:44 GMT</pubDate><ttl>60</ttl><item><title>Reading notes -- Singleton pattern</title><link>http://www.blogjava.net/jedikings/archive/2006/07/09/57330.html</link><dc:creator>Jedi</dc:creator><author>Jedi</author><pubDate>Sun, 09 Jul 2006 04:42:00 GMT</pubDate><guid>http://www.blogjava.net/jedikings/archive/2006/07/09/57330.html</guid><wfw:comment>http://www.blogjava.net/jedikings/comments/57330.html</wfw:comment><comments>http://www.blogjava.net/jedikings/archive/2006/07/09/57330.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jedikings/comments/commentRss/57330.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jedikings/services/trackbacks/57330.html</trackback:ping><description><![CDATA[
		<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;">
				<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->
				<span style="color: rgb(0, 0, 255);">public</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 255);">class</span>
				<span style="color: rgb(0, 0, 0);"> Singleton {<br /><br />    </span>
				<span style="color: rgb(0, 0, 255);">private</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 255);">volatile</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 255);">static</span>
				<span style="color: rgb(0, 0, 0);"> Singleton uniqueInstance;<br />    </span>
				<span style="color: rgb(0, 0, 255);">private</span>
				<span style="color: rgb(0, 0, 0);"> Singleton(){<br />        <br />    }<br />    <br />    </span>
				<span style="color: rgb(0, 0, 255);">public</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 255);">static</span>
				<span style="color: rgb(0, 0, 0);"> Singleton getInstance(){<br />        </span>
				<span style="color: rgb(0, 0, 255);">if</span>
				<span style="color: rgb(0, 0, 0);">(uniqueInstance</span>
				<span style="color: rgb(0, 0, 0);">==</span>
				<span style="color: rgb(0, 0, 255);">null</span>
				<span style="color: rgb(0, 0, 0);">){<br />            </span>
				<span style="color: rgb(0, 0, 255);">synchronized</span>
				<span style="color: rgb(0, 0, 0);">(Singleton.</span>
				<span style="color: rgb(0, 0, 255);">class</span>
				<span style="color: rgb(0, 0, 0);">){<br />                </span>
				<span style="color: rgb(0, 0, 255);">if</span>
				<span style="color: rgb(0, 0, 0);">(uniqueInstance</span>
				<span style="color: rgb(0, 0, 0);">==</span>
				<span style="color: rgb(0, 0, 255);">null</span>
				<span style="color: rgb(0, 0, 0);">){<br />                    uniqueInstance </span>
				<span style="color: rgb(0, 0, 0);">=</span>
				<span style="color: rgb(0, 0, 0);"> </span>
				<span style="color: rgb(0, 0, 255);">new</span>
				<span style="color: rgb(0, 0, 0);"> Singleton();<br />                }<br />            }<br />        }        <br />        </span>
				<span style="color: rgb(0, 0, 255);">return</span>
				<span style="color: rgb(0, 0, 0);"> uniqueInstance; <br />    }<br /><br />}</span>
		</div>
		<br />1. private constructor<br />2. static getInstance<br />3. syncronized..waste a lot of time<br />4. double check..modified syncronize, so time-waste might occurs only when first time the instance construct<br /><img src ="http://www.blogjava.net/jedikings/aggbug/57330.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jedikings/" target="_blank">Jedi</a> 2006-07-09 12:42 <a href="http://www.blogjava.net/jedikings/archive/2006/07/09/57330.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Reading note of "Head First Design Patterns": Strategy Pattern</title><link>http://www.blogjava.net/jedikings/archive/2006/06/13/52422.html</link><dc:creator>Jedi</dc:creator><author>Jedi</author><pubDate>Tue, 13 Jun 2006 04:42:00 GMT</pubDate><guid>http://www.blogjava.net/jedikings/archive/2006/06/13/52422.html</guid><wfw:comment>http://www.blogjava.net/jedikings/comments/52422.html</wfw:comment><comments>http://www.blogjava.net/jedikings/archive/2006/06/13/52422.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jedikings/comments/commentRss/52422.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jedikings/services/trackbacks/52422.html</trackback:ping><description><![CDATA[Problem:   Started with a simple SimUDuck App..<br />   Joe's company makes a duck pond simulation game, SimUDuck, The game can show a large variety of duck species swimming and making quacking sounds.<br /><br />Initial Design:<br /><img style="WIDTH: 529px; HEIGHT: 271px" height="296" alt="diagram.JPG" src="http://www.blogjava.net/images/blogjava_net/jedikings/diagram.JPG" width="489" border="0" /><br />But now some new functionality should be added, for example: we need some of the ducks to FLY.<br /><br />First Design:<br />   We add a method fly() into the Duck class. It seems worked, but something went horribly wrong because <font style="BACKGROUND-COLOR: #9acd32">not all</font> ducks can fly. so....<br /><br />Second Design: Using inheritance and polymorphism<br />   Always override the fly() mehtod in the subclass where needed.<br /><p align="center"><img height="130" alt="test.JPG" src="http://www.blogjava.net/images/blogjava_net/jedikings/test.JPG" width="178" border="0" /><br />   </p>   Drawbacks: Everytime a new duck is added, you will be forced to look at and possibly override fly() and quack(). so is there a cleaner way of having only some of the duck types fly or quack?<br /><br />Third Design: Using interface!<br />   <img height="279" alt="test1.JPG" src="http://www.blogjava.net/images/blogjava_net/jedikings/test1.JPG" width="633" border="0" /><br />Drawbacks: It completely destroy code reuse for those behaviors.<br /><br /><font style="BACKGROUND-COLOR: #ffa500">1. Design Principles:</font><font color="#ff0000"> Identify the aspects of your application that vary and separate them form what stays the same!</font><br />                               which means Encapsulate the parts that vary!<br /><font style="BACKGROUND-COLOR: #ffa500">2. Design Principles:</font><font style="BACKGROUND-COLOR: #ffffff"> Program to an interface, not an implementation! (<font color="#ff0000">interface here means supertype! including interface<br />                               and abstract class!.. making use of the polymorphism functionality).<br /><font style="BACKGROUND-COLOR: #ffa500" color="#000000">3. Design Principles:</font> <font color="#000000"> Favor composition over interface!</font> <br /></font></font><br />Strategy Pattern: Using Composition!<br /><img height="174" alt="test2.JPG" src="http://www.blogjava.net/images/blogjava_net/jedikings/test2.JPG" width="178" border="0" /><br /><br />Code implement:<br />FlyBehavior.java<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_28_52_Open_Image" onclick="this.style.display='none'; Codehighlighter1_28_52_Open_Text.style.display='none'; Codehighlighter1_28_52_Closed_Image.style.display='inline'; Codehighlighter1_28_52_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_28_52_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_28_52_Closed_Text.style.display='none'; Codehighlighter1_28_52_Open_Image.style.display='inline'; Codehighlighter1_28_52_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">interface</span><span style="COLOR: #000000"> FlyBehavior</span><span id="Codehighlighter1_28_52_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_28_52_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.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"> fly();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br />FlyWithWings.java<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_48_119_Open_Image" onclick="this.style.display='none'; Codehighlighter1_48_119_Open_Text.style.display='none'; Codehighlighter1_48_119_Closed_Image.style.display='inline'; Codehighlighter1_48_119_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_48_119_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_48_119_Closed_Text.style.display='none'; Codehighlighter1_48_119_Open_Image.style.display='inline'; Codehighlighter1_48_119_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> FlyWithWings </span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000"> FlyBehavior</span><span id="Codehighlighter1_48_119_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_48_119_Open_Text"><span style="COLOR: #000000">{<br /><img id="Codehighlighter1_70_117_Open_Image" onclick="this.style.display='none'; Codehighlighter1_70_117_Open_Text.style.display='none'; Codehighlighter1_70_117_Closed_Image.style.display='inline'; Codehighlighter1_70_117_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_70_117_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_70_117_Closed_Text.style.display='none'; Codehighlighter1_70_117_Open_Image.style.display='inline'; Codehighlighter1_70_117_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"> fly()</span><span id="Codehighlighter1_70_117_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_70_117_Open_Text"><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">I'm flying!!</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/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br />FlyNoWay.java<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_44_114_Open_Image" onclick="this.style.display='none'; Codehighlighter1_44_114_Open_Text.style.display='none'; Codehighlighter1_44_114_Closed_Image.style.display='inline'; Codehighlighter1_44_114_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_44_114_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_44_114_Closed_Text.style.display='none'; Codehighlighter1_44_114_Open_Image.style.display='inline'; Codehighlighter1_44_114_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> FlyNoWay </span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000"> FlyBehavior</span><span id="Codehighlighter1_44_114_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_44_114_Open_Text"><span style="COLOR: #000000">{<br /><img id="Codehighlighter1_66_112_Open_Image" onclick="this.style.display='none'; Codehighlighter1_66_112_Open_Text.style.display='none'; Codehighlighter1_66_112_Closed_Image.style.display='inline'; Codehighlighter1_66_112_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_66_112_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_66_112_Closed_Text.style.display='none'; Codehighlighter1_66_112_Open_Image.style.display='inline'; Codehighlighter1_66_112_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"> fly()</span><span id="Codehighlighter1_66_112_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_66_112_Open_Text"><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">I can't fly</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/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br />Duck.java<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_26_278_Open_Image" onclick="this.style.display='none'; Codehighlighter1_26_278_Open_Text.style.display='none'; Codehighlighter1_26_278_Closed_Image.style.display='inline'; Codehighlighter1_26_278_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_26_278_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_26_278_Closed_Text.style.display='none'; Codehighlighter1_26_278_Open_Image.style.display='inline'; Codehighlighter1_26_278_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">abstract</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> Duck</span><span id="Codehighlighter1_26_278_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_26_278_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />   FlyBehavior flyBehavior;<br /><img id="Codehighlighter1_72_83_Open_Image" onclick="this.style.display='none'; Codehighlighter1_72_83_Open_Text.style.display='none'; Codehighlighter1_72_83_Closed_Image.style.display='inline'; Codehighlighter1_72_83_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_72_83_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_72_83_Closed_Text.style.display='none'; Codehighlighter1_72_83_Open_Image.style.display='inline'; Codehighlighter1_72_83_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"> Duck()</span><span id="Codehighlighter1_72_83_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_72_83_Open_Text"><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/InBlock.gif" align="top" />   </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">abstract</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> display();<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />   <br /><img id="Codehighlighter1_155_185_Open_Image" onclick="this.style.display='none'; Codehighlighter1_155_185_Open_Text.style.display='none'; Codehighlighter1_155_185_Closed_Image.style.display='inline'; Codehighlighter1_155_185_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_155_185_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_155_185_Closed_Text.style.display='none'; Codehighlighter1_155_185_Open_Image.style.display='inline'; Codehighlighter1_155_185_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"> performFly()</span><span id="Codehighlighter1_155_185_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_155_185_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />      flyBehavior.fly();<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_212_276_Open_Image" onclick="this.style.display='none'; Codehighlighter1_212_276_Open_Text.style.display='none'; Codehighlighter1_212_276_Closed_Image.style.display='inline'; Codehighlighter1_212_276_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_212_276_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_212_276_Closed_Text.style.display='none'; Codehighlighter1_212_276_Open_Image.style.display='inline'; Codehighlighter1_212_276_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"> swim()</span><span id="Codehighlighter1_212_276_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_212_276_Open_Text"><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">All ducks float, even decoys!</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/ExpandedBlockEnd.gif" align="top" />}</span></span></div><br />MallardDuck.java<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_24_188_Open_Image" onclick="this.style.display='none'; Codehighlighter1_24_188_Open_Text.style.display='none'; Codehighlighter1_24_188_Closed_Image.style.display='inline'; Codehighlighter1_24_188_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_24_188_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_24_188_Closed_Text.style.display='none'; Codehighlighter1_24_188_Open_Image.style.display='inline'; Codehighlighter1_24_188_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> MallardDuck</span><span id="Codehighlighter1_24_188_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_24_188_Open_Text"><span style="COLOR: #000000">{<br /><img id="Codehighlighter1_49_98_Open_Image" onclick="this.style.display='none'; Codehighlighter1_49_98_Open_Text.style.display='none'; Codehighlighter1_49_98_Closed_Image.style.display='inline'; Codehighlighter1_49_98_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_49_98_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_49_98_Closed_Text.style.display='none'; Codehighlighter1_49_98_Open_Image.style.display='inline'; Codehighlighter1_49_98_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"> MallardDuck()</span><span id="Codehighlighter1_49_98_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_49_98_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />      flyBehavior</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> FlyWithWings();      <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_128_186_Open_Image" onclick="this.style.display='none'; Codehighlighter1_128_186_Open_Text.style.display='none'; Codehighlighter1_128_186_Closed_Image.style.display='inline'; Codehighlighter1_128_186_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_128_186_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_128_186_Closed_Text.style.display='none'; Codehighlighter1_128_186_Open_Image.style.display='inline'; Codehighlighter1_128_186_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"> display()</span><span id="Codehighlighter1_128_186_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_128_186_Open_Text"><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">I'm a real mallard duck</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/ExpandedBlockEnd.gif" align="top" />}</span></span></div><p><font style="BACKGROUND-COLOR: #ffffff"><font color="#ff0000"><font color="#000000">The Definition of Strategy Pattern: The Strategy Pattern defines a family of algorithms, encapsulates each one, and makes them intercahgeable. Strategy lets the algorithm vary indepanedtl from client that use it</font></font></font><font style="BACKGROUND-COLOR: #ffffff"><font color="#ff0000"><br /></font></font> <br />Problems: <br />1. It's weird to have a class that's jast a behavior: classes represent things both have state and methods. a flying behavior might have instance variables representing the attributes for the flying behavior.<br />2. Be care of Over-Design: implement your code first, then refractoring!</p><img src ="http://www.blogjava.net/jedikings/aggbug/52422.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jedikings/" target="_blank">Jedi</a> 2006-06-13 12:42 <a href="http://www.blogjava.net/jedikings/archive/2006/06/13/52422.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>