﻿<?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-BirdsHover-随笔分类-设计模式</title><link>http://www.blogjava.net/birdshover/category/41278.html</link><description>——路漫漫其修远兮，吾将上下而爬楼梯！</description><language>zh-cn</language><lastBuildDate>Thu, 13 Aug 2009 05:38:10 GMT</lastBuildDate><pubDate>Thu, 13 Aug 2009 05:38:10 GMT</pubDate><ttl>60</ttl><item><title>接口型（结构型）模式——适配器模式</title><link>http://www.blogjava.net/birdshover/archive/2009/08/13/290981.html</link><dc:creator>Birdshover</dc:creator><author>Birdshover</author><pubDate>Thu, 13 Aug 2009 04:48:00 GMT</pubDate><guid>http://www.blogjava.net/birdshover/archive/2009/08/13/290981.html</guid><wfw:comment>http://www.blogjava.net/birdshover/comments/290981.html</wfw:comment><comments>http://www.blogjava.net/birdshover/archive/2009/08/13/290981.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/birdshover/comments/commentRss/290981.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/birdshover/services/trackbacks/290981.html</trackback:ping><description><![CDATA[<p align="left">接口型模式（Interface Pattern），有的书上也叫结构型模式(Structural Pattern)。适配器模式是其中的一种。<br />
<br />
一、对接口进行适配<br />
<br />
</p>
<div align="center"><img height="177" alt="" src="http://www.blogjava.net/images/blogjava_net/birdshover/dd.jpg" width="281" border="0" /><br />
<br />
图1.1</div>
如图1.1，已经存在了ExistsClass实现了想要的功能，但是，在使用时可能无法使用，因此，把使用的条件抽象为Adapter接口，用AdapterClass继承自ExistsClass同时实现接口，完成工作。<br />
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;Interface.Adapter;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img id="Codehighlighter1_53_72_Open_Image" onclick="this.style.display='none'; Codehighlighter1_53_72_Open_Text.style.display='none'; Codehighlighter1_53_72_Closed_Image.style.display='inline'; Codehighlighter1_53_72_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_53_72_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_53_72_Closed_Text.style.display='none'; Codehighlighter1_53_72_Open_Image.style.display='inline'; Codehighlighter1_53_72_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">interface</span><span style="color: #000000">&nbsp;Adapter&nbsp;</span><span id="Codehighlighter1_53_72_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_53_72_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;NewWork();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;Interface.Adapter;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img id="Codehighlighter1_53_113_Open_Image" onclick="this.style.display='none'; Codehighlighter1_53_113_Open_Text.style.display='none'; Codehighlighter1_53_113_Closed_Image.style.display='inline'; Codehighlighter1_53_113_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_53_113_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_53_113_Closed_Text.style.display='none'; Codehighlighter1_53_113_Open_Image.style.display='inline'; Codehighlighter1_53_113_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;ExistsClass&nbsp;</span><span id="Codehighlighter1_53_113_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_53_113_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_74_111_Open_Image" onclick="this.style.display='none'; Codehighlighter1_74_111_Open_Text.style.display='none'; Codehighlighter1_74_111_Closed_Image.style.display='inline'; Codehighlighter1_74_111_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_74_111_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_74_111_Closed_Text.style.display='none'; Codehighlighter1_74_111_Open_Image.style.display='inline'; Codehighlighter1_74_111_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Work()</span><span id="Codehighlighter1_74_111_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_74_111_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000">"</span><span style="color: #000000">do&nbsp;work!</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;Interface.Adapter;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img id="Codehighlighter1_93_188_Open_Image" onclick="this.style.display='none'; Codehighlighter1_93_188_Open_Text.style.display='none'; Codehighlighter1_93_188_Closed_Image.style.display='inline'; Codehighlighter1_93_188_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_93_188_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_93_188_Closed_Text.style.display='none'; Codehighlighter1_93_188_Open_Image.style.display='inline'; Codehighlighter1_93_188_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;AdapterClass&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;ExistsClass&nbsp;</span><span style="color: #0000ff">implements</span><span style="color: #000000">&nbsp;Adapter&nbsp;</span><span id="Codehighlighter1_93_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 alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_93_188_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
<img id="Codehighlighter1_130_186_Open_Image" onclick="this.style.display='none'; Codehighlighter1_130_186_Open_Text.style.display='none'; Codehighlighter1_130_186_Closed_Image.style.display='inline'; Codehighlighter1_130_186_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_130_186_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_130_186_Closed_Text.style.display='none'; Codehighlighter1_130_186_Open_Image.style.display='inline'; Codehighlighter1_130_186_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;NewWork()&nbsp;</span><span id="Codehighlighter1_130_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 alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_130_186_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;TODO&nbsp;Auto-generated&nbsp;method&nbsp;stub</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">super</span><span style="color: #000000">.Work();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;UTest;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;junit.framework.TestCase;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;Interface.Adapter.Adapter;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;Interface.Adapter.AdapterClass;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
<img id="Codehighlighter1_165_251_Open_Image" onclick="this.style.display='none'; Codehighlighter1_165_251_Open_Text.style.display='none'; Codehighlighter1_165_251_Closed_Image.style.display='inline'; Codehighlighter1_165_251_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_165_251_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_165_251_Closed_Text.style.display='none'; Codehighlighter1_165_251_Open_Image.style.display='inline'; Codehighlighter1_165_251_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;TestAdapter&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;TestCase&nbsp;</span><span id="Codehighlighter1_165_251_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_165_251_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_193_249_Open_Image" onclick="this.style.display='none'; Codehighlighter1_193_249_Open_Text.style.display='none'; Codehighlighter1_193_249_Closed_Image.style.display='inline'; Codehighlighter1_193_249_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_193_249_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_193_249_Closed_Text.style.display='none'; Codehighlighter1_193_249_Open_Image.style.display='inline'; Codehighlighter1_193_249_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;testNewWork()</span><span id="Codehighlighter1_193_249_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_193_249_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adapter&nbsp;ada&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;AdapterClass();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ada.NewWork();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>
<p>&nbsp;</p>
<p>二、对类对象进行适配<br />
</p>
<div align="center"><img height="180" alt="" src="http://www.blogjava.net/images/blogjava_net/birdshover/dd1.jpg" width="280" border="0" /><br />
图2.1</div>
<p>和接口匹配差不多，但对已存在类不是继承关系，而是一种关联或依赖。<br />
</p>
<img src ="http://www.blogjava.net/birdshover/aggbug/290981.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/birdshover/" target="_blank">Birdshover</a> 2009-08-13 12:48 <a href="http://www.blogjava.net/birdshover/archive/2009/08/13/290981.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>