﻿<?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>C++博客-Anywhere-随笔分类-设计模式学习笔记----结构模式 </title><link>http://www.cppblog.com/Aireed/category/11145.html</link><description>水中苇</description><language>zh-cn</language><lastBuildDate>Sun, 16 Aug 2009 12:01:37 GMT</lastBuildDate><pubDate>Sun, 16 Aug 2009 12:01:37 GMT</pubDate><ttl>60</ttl><item><title>Facade模式</title><link>http://www.cppblog.com/Aireed/archive/2009/08/12/92981.html</link><dc:creator>三水寿</dc:creator><author>三水寿</author><pubDate>Wed, 12 Aug 2009 00:47:00 GMT</pubDate><guid>http://www.cppblog.com/Aireed/archive/2009/08/12/92981.html</guid><wfw:comment>http://www.cppblog.com/Aireed/comments/92981.html</wfw:comment><comments>http://www.cppblog.com/Aireed/archive/2009/08/12/92981.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Aireed/comments/commentRss/92981.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Aireed/services/trackbacks/92981.html</trackback:ping><description><![CDATA[该模式相对来说比较简单.<br>主要思想:假如要将类A中的接口,类B中的接口,..简单的组合到一个类中.就可以新创建一个类,包含以上几个类的对象指针,然后生成一个接口,在该接口中通过成员指针调用它们各自的接口.<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 src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;A<br><img id=Codehighlighter1_8_27_Open_Image onclick="this.style.display='none'; Codehighlighter1_8_27_Open_Text.style.display='none'; Codehighlighter1_8_27_Closed_Image.style.display='inline'; Codehighlighter1_8_27_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_8_27_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_8_27_Closed_Text.style.display='none'; Codehighlighter1_8_27_Open_Image.style.display='inline'; Codehighlighter1_8_27_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_8_27_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.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_8_27_Open_Text><span style="COLOR: #000000">{<br>&nbsp;&nbsp;&nbsp; public:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;operation;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;B<br><img id=Codehighlighter1_38_57_Open_Image onclick="this.style.display='none'; Codehighlighter1_38_57_Open_Text.style.display='none'; Codehighlighter1_38_57_Closed_Image.style.display='inline'; Codehighlighter1_38_57_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_38_57_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_38_57_Closed_Text.style.display='none'; Codehighlighter1_38_57_Open_Image.style.display='inline'; Codehighlighter1_38_57_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_38_57_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.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_38_57_Open_Text><span style="COLOR: #000000">{<br>&nbsp;&nbsp;&nbsp; public:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;operation;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;C<br><img id=Codehighlighter1_67_149_Open_Image onclick="this.style.display='none'; Codehighlighter1_67_149_Open_Text.style.display='none'; Codehighlighter1_67_149_Closed_Image.style.display='inline'; Codehighlighter1_67_149_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_67_149_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_67_149_Closed_Text.style.display='none'; Codehighlighter1_67_149_Open_Image.style.display='inline'; Codehighlighter1_67_149_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_67_149_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.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_67_149_Open_Text><span style="COLOR: #000000">{<br>&nbsp;&nbsp;&nbsp; public:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;operation<br><img id=Codehighlighter1_85_122_Open_Image onclick="this.style.display='none'; Codehighlighter1_85_122_Open_Text.style.display='none'; Codehighlighter1_85_122_Closed_Image.style.display='inline'; Codehighlighter1_85_122_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_85_122_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_85_122_Closed_Text.style.display='none'; Codehighlighter1_85_122_Open_Image.style.display='inline'; Codehighlighter1_85_122_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span id=Codehighlighter1_85_122_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.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_85_122_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;a</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">operation();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;b</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">operation();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;A&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">a;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;B&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">b;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<img src ="http://www.cppblog.com/Aireed/aggbug/92981.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Aireed/" target="_blank">三水寿</a> 2009-08-12 08:47 <a href="http://www.cppblog.com/Aireed/archive/2009/08/12/92981.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Decorator模式...</title><link>http://www.cppblog.com/Aireed/archive/2009/08/10/92832.html</link><dc:creator>三水寿</dc:creator><author>三水寿</author><pubDate>Mon, 10 Aug 2009 11:11:00 GMT</pubDate><guid>http://www.cppblog.com/Aireed/archive/2009/08/10/92832.html</guid><wfw:comment>http://www.cppblog.com/Aireed/comments/92832.html</wfw:comment><comments>http://www.cppblog.com/Aireed/archive/2009/08/10/92832.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Aireed/comments/commentRss/92832.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Aireed/services/trackbacks/92832.html</trackback:ping><description><![CDATA[<p>由于在开发过程中.由于需求的不断改变,可能要不断的为类添加新的功能,这样就要不断的继承现有的类,以致于继承的层次逐渐加深.为了避免这种情况发生,我们用另外一种方式来实现类的功能的增加,即Decorator模式.<br>先看一下代码:<br></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.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Component<br><img id=Codehighlighter1_16_97_Open_Image onclick="this.style.display='none'; Codehighlighter1_16_97_Open_Text.style.display='none'; Codehighlighter1_16_97_Closed_Image.style.display='inline'; Codehighlighter1_16_97_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_16_97_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_16_97_Closed_Text.style.display='none'; Codehighlighter1_16_97_Open_Image.style.display='inline'; Codehighlighter1_16_97_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_16_97_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.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_16_97_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;Component();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">Component();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Operation();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;ChildCom:</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;Component<br><img id=Codehighlighter1_132_192_Open_Image onclick="this.style.display='none'; Codehighlighter1_132_192_Open_Text.style.display='none'; Codehighlighter1_132_192_Closed_Image.style.display='inline'; Codehighlighter1_132_192_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_132_192_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_132_192_Closed_Text.style.display='none'; Codehighlighter1_132_192_Open_Image.style.display='inline'; Codehighlighter1_132_192_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_132_192_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.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_132_192_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;ChildCom();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">ChildCom();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Operation();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Decorator:</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;Component<br><img id=Codehighlighter1_228_320_Open_Image onclick="this.style.display='none'; Codehighlighter1_228_320_Open_Text.style.display='none'; Codehighlighter1_228_320_Closed_Image.style.display='inline'; Codehighlighter1_228_320_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_228_320_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_228_320_Closed_Text.style.display='none'; Codehighlighter1_228_320_Open_Image.style.display='inline'; Codehighlighter1_228_320_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_228_320_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.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_228_320_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">public:</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;Decorator(Component *);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">Decorator();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Operation();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">protected</span><span style="COLOR: #000000">:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;Component&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">_cmpt;&nbsp;&nbsp; //保留了父类的operation.<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;ChildDecorator<br><img id=Codehighlighter1_344_471_Open_Image onclick="this.style.display='none'; Codehighlighter1_344_471_Open_Text.style.display='none'; Codehighlighter1_344_471_Closed_Image.style.display='inline'; Codehighlighter1_344_471_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_344_471_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_344_471_Closed_Text.style.display='none'; Codehighlighter1_344_471_Open_Image.style.display='inline'; Codehighlighter1_344_471_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_344_471_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.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_344_471_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>ChildDecorator(Component *pCom):Decorator(pCom)<br>&nbsp;&nbsp; {}<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">ChildDecorator();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Operation()<br><img id=Codehighlighter1_408_451_Open_Image onclick="this.style.display='none'; Codehighlighter1_408_451_Open_Text.style.display='none'; Codehighlighter1_408_451_Closed_Image.style.display='inline'; Codehighlighter1_408_451_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_408_451_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_408_451_Closed_Text.style.display='none'; Codehighlighter1_408_451_Open_Image.style.display='inline'; Codehighlighter1_408_451_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span id=Codehighlighter1_408_451_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.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_408_451_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;_cmpt</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">Operation();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">newAction();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;newAction();&nbsp; //新添加的operation.<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">;</span></div>
Component类为父类,ChildCom为Component的一个子类,假如在ChildCom上再添加一个行为的话,这时,创建一个Decorator抽象类继承于Component,然后创建一个子类,在这个子类中完成添加新功能... 
<img src ="http://www.cppblog.com/Aireed/aggbug/92832.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Aireed/" target="_blank">三水寿</a> 2009-08-10 19:11 <a href="http://www.cppblog.com/Aireed/archive/2009/08/10/92832.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Adapter模式</title><link>http://www.cppblog.com/Aireed/archive/2009/08/10/92769.html</link><dc:creator>三水寿</dc:creator><author>三水寿</author><pubDate>Mon, 10 Aug 2009 02:10:00 GMT</pubDate><guid>http://www.cppblog.com/Aireed/archive/2009/08/10/92769.html</guid><wfw:comment>http://www.cppblog.com/Aireed/comments/92769.html</wfw:comment><comments>http://www.cppblog.com/Aireed/archive/2009/08/10/92769.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Aireed/comments/commentRss/92769.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Aireed/services/trackbacks/92769.html</trackback:ping><description><![CDATA[A:adapter模式中的类模式:<br>问题:类A中的方法要用到类B提供的接口.<br>实现方法:<br>新生成一个类C,公共继承于类A,私有继承于类B:<br>这样.类C,拥有了类A中的公有方法,也拥有了类B中提供的公有接口.<br>然后,C重载类A的方法,调用B提供的接口 .<br><br>这里有一个关于接口继承和实现继承的问题:<br>接口继承:就是继承父类的接口还可以向外部提供接口.<br>实现继承:就是继承父类的接口以后就不可以向外部提供了..<br><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 src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;A<br><img id=Codehighlighter1_8_70_Open_Image onclick="this.style.display='none'; Codehighlighter1_8_70_Open_Text.style.display='none'; Codehighlighter1_8_70_Closed_Image.style.display='inline'; Codehighlighter1_8_70_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_8_70_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_8_70_Closed_Text.style.display='none'; Codehighlighter1_8_70_Open_Image.style.display='inline'; Codehighlighter1_8_70_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_8_70_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.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_8_70_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>A();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">A();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>vitual&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;operation();&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">供C重载</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;B<br><img id=Codehighlighter1_81_133_Open_Image onclick="this.style.display='none'; Codehighlighter1_81_133_Open_Text.style.display='none'; Codehighlighter1_81_133_Closed_Image.style.display='inline'; Codehighlighter1_81_133_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_81_133_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_81_133_Closed_Text.style.display='none'; Codehighlighter1_81_133_Open_Image.style.display='inline'; Codehighlighter1_81_133_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_81_133_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.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_81_133_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;B();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;</span><span style="COLOR: #0000ff">virtual</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">B();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;operationB();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;C:</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;A,</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;B<br><img id=Codehighlighter1_163_230_Open_Image onclick="this.style.display='none'; Codehighlighter1_163_230_Open_Text.style.display='none'; Codehighlighter1_163_230_Closed_Image.style.display='inline'; Codehighlighter1_163_230_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_163_230_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_163_230_Closed_Text.style.display='none'; Codehighlighter1_163_230_Open_Image.style.display='inline'; Codehighlighter1_163_230_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_163_230_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.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_163_230_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;C();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">C():<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;operation()<br><img id=Codehighlighter1_204_228_Open_Image onclick="this.style.display='none'; Codehighlighter1_204_228_Open_Text.style.display='none'; Codehighlighter1_204_228_Closed_Image.style.display='inline'; Codehighlighter1_204_228_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_204_228_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_204_228_Closed_Text.style.display='none'; Codehighlighter1_204_228_Open_Image.style.display='inline'; Codehighlighter1_204_228_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span id=Codehighlighter1_204_228_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.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_204_228_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">operationB();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
B:Adapter 的对象模式<br>这种模式则和bridge模式中有些类似,采用类组合的方式.对于类A,和类B;<br>新创建一个类C,公共继承于类A,然后在类C中创建一个类B的对象指针.这样就可以通过这个指针来调用类B提供的接口 .<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.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;C:</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;A<br><img id=Codehighlighter1_17_109_Open_Image onclick="this.style.display='none'; Codehighlighter1_17_109_Open_Text.style.display='none'; Codehighlighter1_17_109_Closed_Image.style.display='inline'; Codehighlighter1_17_109_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_17_109_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_17_109_Closed_Text.style.display='none'; Codehighlighter1_17_109_Open_Image.style.display='inline'; Codehighlighter1_17_109_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_17_109_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.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_17_109_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;C();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">C();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;operation<br><img id=Codehighlighter1_62_88_Open_Image onclick="this.style.display='none'; Codehighlighter1_62_88_Open_Text.style.display='none'; Codehighlighter1_62_88_Closed_Image.style.display='inline'; Codehighlighter1_62_88_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_62_88_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_62_88_Closed_Text.style.display='none'; Codehighlighter1_62_88_Open_Image.style.display='inline'; Codehighlighter1_62_88_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;</span><span id=Codehighlighter1_62_88_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.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_62_88_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;pB</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">operationB();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;B&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pB;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">;</span></div>
<br><br>
<img src ="http://www.cppblog.com/Aireed/aggbug/92769.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Aireed/" target="_blank">三水寿</a> 2009-08-10 10:10 <a href="http://www.cppblog.com/Aireed/archive/2009/08/10/92769.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Bridge模式..</title><link>http://www.cppblog.com/Aireed/archive/2009/08/10/92756.html</link><dc:creator>三水寿</dc:creator><author>三水寿</author><pubDate>Mon, 10 Aug 2009 00:54:00 GMT</pubDate><guid>http://www.cppblog.com/Aireed/archive/2009/08/10/92756.html</guid><wfw:comment>http://www.cppblog.com/Aireed/comments/92756.html</wfw:comment><comments>http://www.cppblog.com/Aireed/archive/2009/08/10/92756.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Aireed/comments/commentRss/92756.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Aireed/services/trackbacks/92756.html</trackback:ping><description><![CDATA[将类中的属性和方法(即行为)分开定义.这样,当需要修改的时候,方法和属性就可以分开修改,降低了耦合度.<br>bridge&nbsp; 类的抽象:<br><br>
<table style="WIDTH: 1158px; BORDER-COLLAPSE: collapse; HEIGHT: 230px" cellSpacing=0 cellPadding=3 border=1>
    <tbody>
        <tr>
            <td width="50%">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class bridge</td>
            <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class bridgeImp</td>
        </tr>
        <tr>
            <td>属性:&nbsp; bridgeImp* pImp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ......</td>
            <td>属性:无(一般无,因为这个类是用来实现bridge中的操作的);</td>
        </tr>
        <tr>
            <td>行为函数:通过pImp调用类bridgeImp中的行为来执行.<br></td>
            <td>行为函数:一些操作.</td>
        </tr>
    </tbody>
</table>
这样,我们通过在类bridge中包含一个bridgeImp的对象指针,就把类的抽象和行为的实现分开了...<br>讨论与思考:想对bridge中的属性进行操作:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 把bridge中的成员属性作为参数添加到bridgeImp的行为函数中. 
<img src ="http://www.cppblog.com/Aireed/aggbug/92756.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Aireed/" target="_blank">三水寿</a> 2009-08-10 08:54 <a href="http://www.cppblog.com/Aireed/archive/2009/08/10/92756.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>