﻿<?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-yuyee-随笔分类-desginpattern</title><link>http://www.blogjava.net/yuyee/category/47205.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 08 Dec 2010 01:37:25 GMT</lastBuildDate><pubDate>Wed, 08 Dec 2010 01:37:25 GMT</pubDate><ttl>60</ttl><item><title>适配器</title><link>http://www.blogjava.net/yuyee/archive/2010/11/29/339348.html</link><dc:creator>羔羊</dc:creator><author>羔羊</author><pubDate>Mon, 29 Nov 2010 14:28:00 GMT</pubDate><guid>http://www.blogjava.net/yuyee/archive/2010/11/29/339348.html</guid><description><![CDATA[<div class="Section0" style="layout-grid:  15.6pt none">
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: '宋体'; mso-spacerun: 'yes'">适配器模式：将一个现有类实现的功能接口转变为客户希望的接口</span><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: '宋体'; mso-spacerun: 'yes'">场景：你想使用一个已经存在的类，但是这个类的接口不符合需求，所以需要适配</span><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: '宋体'; mso-spacerun: 'yes'">有</span><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: '宋体'; mso-spacerun: 'yes'">2<font face="宋体">中实现：一种是继承，一种是委托，先来看看继承</font></span><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: '宋体'; mso-spacerun: 'yes'">&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: '宋体'; mso-spacerun: 'yes'">第一步：系统现有功能</span><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><font face="'Courier New'" color="#7f0055"><span style="font-size: 14px"><strong></p>
<div style="padding-right: 5px; padding-left: 4px; font-size: 13px; border-left-color: #cccccc; padding-bottom: 4px; width: 98%; word-break: break-all; padding-top: 4px; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.google.desginpattern.adapter;<br />
</span><span style="color: #008000">/**</span><span style="color: #008000"><br />
&nbsp;*&nbsp;现有系统提供的功能<br />
&nbsp;*&nbsp;<br />
&nbsp;*&nbsp;</span><span style="color: #808080">@author</span><span style="color: #008000">&nbsp;Administrator<br />
&nbsp;*&nbsp;<br />
&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;BMWCar&nbsp;{<br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;quickDriver()&nbsp;{<br />
System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">宝马太快</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
}<br />
}</span></div>
</strong></span></font>
<p>&nbsp;</p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: '宋体'; mso-spacerun: 'yes'">第二步：客户需要的接口</span><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><font face="'Courier New'" color="#7f0055"><span style="font-size: 14px"><strong></p>
<div style="padding-right: 5px; padding-left: 4px; font-size: 13px; border-left-color: #cccccc; padding-bottom: 4px; width: 98%; word-break: break-all; padding-top: 4px; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.google.desginpattern.adapter;<br />
</span><span style="color: #008000">/**</span><span style="color: #008000"><br />
&nbsp;*&nbsp;客户需要的接口<br />
&nbsp;*&nbsp;</span><span style="color: #808080">@author</span><span style="color: #008000">&nbsp;Administrator<br />
&nbsp;*<br />
&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">interface</span><span style="color: #000000">&nbsp;Car&nbsp;{<br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;driver();<br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;brake();<br />
}</span></div>
</strong></span></font>
<p>&nbsp;</p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: 'Courier New'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: '宋体'; mso-spacerun: 'yes'">第三步：实现客户需要的功能</span><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><font face="'Courier New'" color="#7f0055"><span style="font-size: 14px"><strong></p>
<div style="padding-right: 5px; padding-left: 4px; font-size: 13px; border-left-color: #cccccc; padding-bottom: 4px; width: 98%; word-break: break-all; padding-top: 4px; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.google.desginpattern.adapter;<br />
</span><span style="color: #008000">/**</span><span style="color: #008000"><br />
&nbsp;*&nbsp;匹配客户需求的实现<br />
&nbsp;*&nbsp;</span><span style="color: #808080">@author</span><span style="color: #008000">&nbsp;Administrator<br />
&nbsp;*<br />
&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;CarAdapter&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;BMWCar&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;Car&nbsp;{<br />
@Override<br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;brake()&nbsp;{<br />
System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">刹车</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
}<br />
@Override<br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;driver()&nbsp;{<br />
quickDriver();<br />
}<br />
}</span></div>
</strong></span></font>
<p>&nbsp;</p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: 'Courier New'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: '宋体'; mso-spacerun: 'yes'">测试类：</span><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; font-family: 'Courier New'; mso-spacerun: 'yes'"><o:p></o:p></span>&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.google.desginpattern.adapter;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_62_169_Open_Image" onclick="this.style.display='none'; Codehighlighter1_62_169_Open_Text.style.display='none'; Codehighlighter1_62_169_Closed_Image.style.display='inline'; Codehighlighter1_62_169_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_62_169_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_62_169_Closed_Text.style.display='none'; Codehighlighter1_62_169_Open_Image.style.display='inline'; Codehighlighter1_62_169_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Test&nbsp;</span><span id="Codehighlighter1_62_169_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_62_169_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_104_166_Open_Image" onclick="this.style.display='none'; Codehighlighter1_104_166_Open_Text.style.display='none'; Codehighlighter1_104_166_Closed_Image.style.display='inline'; Codehighlighter1_104_166_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_104_166_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_104_166_Closed_Text.style.display='none'; Codehighlighter1_104_166_Open_Image.style.display='inline'; Codehighlighter1_104_166_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span id="Codehighlighter1_104_166_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_104_166_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />Car&nbsp;car&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;CarAdapter();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />car.brake();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />car.driver();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: '宋体'; mso-spacerun: 'yes'">输出：</span><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: 'Courier New'; mso-spacerun: 'yes'">刹车</span><span style="font-size: 10.5pt; font-family: 'Courier New'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: 'Courier New'; mso-spacerun: 'yes'">宝马太快</span><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: 'Courier New'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: '宋体'; mso-spacerun: 'yes'">如果是委托的方式，改写<font face="Courier New">adapter</font></span><span style="font-size: 10.5pt; color: rgb(0,0,0); font-family: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class="p0" style="margin-top: 0pt; margin-bottom: 0pt"><font face="'Courier New'" color="#7f0055"><span style="font-size: 14px"><strong></p>
<div style="padding-right: 5px; padding-left: 4px; font-size: 13px; border-left-color: #cccccc; padding-bottom: 4px; width: 98%; word-break: break-all; padding-top: 4px; background-color: #eeeeee"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.google.desginpattern.adapter;<br />
</span><span style="color: #008000">/**</span><span style="color: #008000"><br />
&nbsp;*&nbsp;匹配客户需求的实现<br />
&nbsp;*&nbsp;<br />
&nbsp;*&nbsp;</span><span style="color: #808080">@author</span><span style="color: #008000">&nbsp;Administrator<br />
&nbsp;*&nbsp;<br />
&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;CarAdapter&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;Car&nbsp;{<br />
</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;BMWCar&nbsp;car;<br />
@Override<br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;brake()&nbsp;{<br />
System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">刹车</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
}<br />
@Override<br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;driver()&nbsp;{<br />
car.quickDriver();<br />
}<br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;BMWCar&nbsp;getCar()&nbsp;{<br />
</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;car;<br />
}<br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;setCar(BMWCar&nbsp;car)&nbsp;{<br />
</span><span style="color: #0000ff">this</span><span style="color: #000000">.car&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;car;<br />
}<br />
}</span></div>
</strong></span></font>
<p>&nbsp;</p>
</div>
<img src ="http://www.blogjava.net/yuyee/aggbug/339348.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yuyee/" target="_blank">羔羊</a> 2010-11-29 22:28 <a href="http://www.blogjava.net/yuyee/archive/2010/11/29/339348.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>装饰器</title><link>http://www.blogjava.net/yuyee/archive/2010/11/29/339347.html</link><dc:creator>羔羊</dc:creator><author>羔羊</author><pubDate>Mon, 29 Nov 2010 13:36:00 GMT</pubDate><guid>http://www.blogjava.net/yuyee/archive/2010/11/29/339347.html</guid><description><![CDATA[<div class="Section0" style="layout-grid:15.6000pt;
">
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><font face="宋体"><span style="font-size: 14px;"><br />
</span></font></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">装饰器：装饰器模式主要用于系统扩张功能用，在系统原有的功能上，扩展出其他的功能，</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">JDK<font face="宋体">中</font><font face="Times New Roman">IO</font><font face="宋体">包用到很多，比如</font><font face="Times New Roman">datainputstream</font><font face="宋体">之类，需要用其他流进行构造的上层类，符合面向对象设计的开闭原则</font></span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">下面我来写个例子：</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; ">首先，写一个<font face="Times New Roman">Car</font><font face="宋体">模版，定义基本属性及行为功能</font><font face="Times New Roman">driver</font></span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><font color="#7F0055" face="'Courier New'"><span style="font-size: 14px;"><strong>
</strong></span></font></p>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><font color="#7F0055" face="'Courier New'"><strong><span style="color: #0000FF; ">package</span><span style="color: #000000; ">&nbsp;com.google.desginpattern.decoration;<br />
</span><span style="color: #008000; ">//</span><span style="color: #008000; ">其实这是个模版</span><span style="color: #008000; "><br />
</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">abstract</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;Car&nbsp;{<br />
</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;spreed;<br />
</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;getSpreed()&nbsp;{<br />
</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;spreed;<br />
}<br />
</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;setSpreed(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;spreed)&nbsp;{<br />
</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.spreed&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;spreed;<br />
}<br />
</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">abstract</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;driver();<br />
}</span></strong></font></div>
<font color="#7F0055" face="'Courier New'"><strong>
</strong></font>
<p>&nbsp;</p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.5000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.5000pt; font-family:'宋体'; ">第二步：具体车比如宝马，这是目前系统中这个类能提供的功能</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.5000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><font color="#7F0055" face="'Courier New'"><span style="font-size: 14px;"><strong>
</strong></span></font></p>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><font color="#7F0055" face="'Courier New'"><strong><span style="color: #0000FF; ">package</span><span style="color: #000000; ">&nbsp;com.google.desginpattern.decoration;<br />
</span><span style="color: #008000; ">//</span><span style="color: #008000; ">目前系统中此类的功能</span><span style="color: #008000; "><br />
</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;BMWCar&nbsp;</span><span style="color: #0000FF; ">extends</span><span style="color: #000000; ">&nbsp;Car&nbsp;{<br />
@Override<br />
</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;driver()&nbsp;{<br />
System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">我开着宝马车</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
}<br />
}</span></strong></font></div>
<font color="#7F0055" face="'Courier New'"><strong>
</strong></font>
<p>&nbsp;</p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.5000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.5000pt; font-family:'宋体'; ">现在我想在这个类上扩展出其他功能，比如：泡妞</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.5000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.5000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.5000pt; font-family:'宋体'; ">第三步：定义一个装饰模板，为什么给他定义个模板呢</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.5000pt; font-family:'宋体'; ">~<font face="宋体">因为可以给这个</font><font face="Courier New">BMWCar</font><font face="宋体">类装饰很不同的功能，不只泡妞一个</font><font face="Courier New">~</font></span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.5000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.5000pt; font-family:'宋体'; ">继承<font face="Courier New">Car</font><font face="宋体">父类，覆盖</font><font face="Courier New">driver</font><font face="宋体">功能，调用</font><font face="Courier New">Car</font><font face="宋体">引用完成</font><font face="Courier New">driver</font><font face="宋体">功能</font></span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.5000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.5000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><font color="#7F0055" face="'Courier New'"><span style="font-size: 14px;"><strong>
</strong></span></font></p>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><font color="#7F0055" face="'Courier New'"><strong><span style="color: #0000FF; ">package</span><span style="color: #000000; ">&nbsp;com.google.desginpattern.decoration;<br />
</span><span style="color: #008000; ">//</span><span style="color: #008000; ">装饰器父类</span><span style="color: #008000; "><br />
</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">abstract</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;DecorationCar&nbsp;</span><span style="color: #0000FF; ">extends</span><span style="color: #000000; ">&nbsp;Car&nbsp;{<br />
</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;引入car</span><span style="color: #008000; "><br />
</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;Car&nbsp;car;<br />
@Override<br />
</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;driver()&nbsp;{<br />
car.driver();</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;调用此car来完成装饰器的功能</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">}<br />
</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;Car&nbsp;getCar()&nbsp;{<br />
</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;car;<br />
}<br />
</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;setCar(Car&nbsp;car)&nbsp;{<br />
</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.car&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;car;<br />
}<br />
}</span></strong></font></div>
<font color="#7F0055" face="'Courier New'"><strong>
</strong></font>
<p>&nbsp;</p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.5000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.5000pt; font-family:'宋体'; ">第四步：具体的装饰功能，添加一个构造函数，参数为<font face="Courier New">Car,</font><font face="宋体">为装饰父类</font><font face="Courier New">Car</font><font face="宋体">引用赋值，其实就是原来具体的功能类，回想下</font><font face="Courier New">IO</font><font face="宋体">包里经常</font><font face="Courier New">new</font><font face="宋体">的代码段就明白</font><font face="Courier New">~~</font></span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.5000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><font color="#7F0055" face="'Courier New'"><span style="font-size: 14px;"><strong>
</strong></span></font></p>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><font color="#7F0055" face="'Courier New'"><strong><span style="color: #0000FF; ">package</span><span style="color: #000000; ">&nbsp;com.google.desginpattern.decoration;<br />
</span><span style="color: #008000; ">//</span><span style="color: #008000; ">具体的装饰类,添加额外的泡妞功能</span><span style="color: #008000; "><br />
</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;DecorationBMWCar&nbsp;</span><span style="color: #0000FF; ">extends</span><span style="color: #000000; ">&nbsp;DecorationCar&nbsp;{<br />
</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;DecorationBMWCar(Car&nbsp;car)&nbsp;{<br />
</span><span style="color: #0000FF; ">super</span><span style="color: #000000; ">.setCar(car);<br />
}<br />
@Override<br />
</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;driver()&nbsp;{<br />
</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO&nbsp;Auto-generated&nbsp;method&nbsp;stub</span><span style="color: #008000; "><br />
</span><span style="color: #0000FF; ">super</span><span style="color: #000000; ">.driver();</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;调用原来的功能</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">泡妞</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;添加额外的功能</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">}<br />
}</span></strong></font></div>
<font color="#7F0055" face="'Courier New'"><strong>
</strong></font>
<p>&nbsp;</p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.5000pt; font-family:'宋体'; ">测试类：构造的方法很像<font face="Courier New">IO</font><font face="宋体">包里的流</font></span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.5000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><font color="#7F0055" face="'Courier New'"><span style="font-size: 14px;"><strong>
</strong></span></font></p>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><font color="#7F0055" face="'Courier New'"><strong><span style="color: #0000FF; ">package</span><span style="color: #000000; ">&nbsp;com.google.desginpattern.decoration;<br />
</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&nbsp;{<br />
</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;main(String[]&nbsp;args)&nbsp;{<br />
Car&nbsp;car&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;DecorationBMWCar(</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;BMWCar());<br />
car.driver();<br />
}<br />
}</span></strong></font></div>
<font color="#7F0055" face="'Courier New'"><strong>
</strong></font>
<p>&nbsp;</p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.5000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.5000pt; font-family:'宋体'; ">输出：</span><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.5000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.5000pt; font-family:'Courier New'; ">我开着宝马车</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.5000pt; font-family:'Courier New'; ">泡妞</span><span style="mso-spacerun:'yes'; font-size:10.5000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.5000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.5000pt; font-family:'宋体'; "><o:p></o:p></span></p>
<p class="p0" style="margin-bottom:0pt; margin-top:0pt; "><span style="mso-spacerun:'yes'; color:rgb(0,0,0); font-size:10.5000pt; font-family:'Courier New'; "><o:p></o:p></span></p>
</div>
<img src ="http://www.blogjava.net/yuyee/aggbug/339347.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yuyee/" target="_blank">羔羊</a> 2010-11-29 21:36 <a href="http://www.blogjava.net/yuyee/archive/2010/11/29/339347.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>