﻿<?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++博客-yaoyaozii-随笔分类-Design Pattern</title><link>http://www.cppblog.com/proyao/category/15087.html</link><description>基础不牢，地动山摇...
急不得...</description><language>zh-cn</language><lastBuildDate>Mon, 04 Oct 2010 04:37:15 GMT</lastBuildDate><pubDate>Mon, 04 Oct 2010 04:37:15 GMT</pubDate><ttl>60</ttl><item><title>5.9 Strategy</title><link>http://www.cppblog.com/proyao/archive/2010/10/04/128560.html</link><dc:creator>Acaini.yaoyaozii</dc:creator><author>Acaini.yaoyaozii</author><pubDate>Mon, 04 Oct 2010 04:27:00 GMT</pubDate><guid>http://www.cppblog.com/proyao/archive/2010/10/04/128560.html</guid><wfw:comment>http://www.cppblog.com/proyao/comments/128560.html</wfw:comment><comments>http://www.cppblog.com/proyao/archive/2010/10/04/128560.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/proyao/comments/commentRss/128560.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/proyao/services/trackbacks/128560.html</trackback:ping><description><![CDATA[
<div style="background-color: rgb(238, 238, 238); font-size: 13px; border-left-color: rgb(204, 204, 204); 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>--><span style="color: #008000; ">/*</span><span style="color: #008000; "><br>&nbsp;*&nbsp;5_9_Strategy.cpp<br>&nbsp;*&nbsp;&nbsp;<br>&nbsp;*&nbsp;&nbsp;Created&nbsp;on:&nbsp;2010-9-25<br>&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Author:&nbsp;wyiu<br>&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br><br></span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;Compositor<br>{<br></span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">:<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">virtual</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;compose(Coord&nbsp;natural[],&nbsp;Coord&nbsp;stretch[],&nbsp;Coord&nbsp;shrink[],<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;componentCount,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;lineWidth,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;breaks)&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br><br></span><span style="color: #0000FF; ">protected</span><span style="color: #000000; ">:<br>&nbsp;&nbsp;&nbsp;&nbsp;Compositor();<br><br>};<br><br></span><span style="color: #008000; ">//</span><span style="color: #008000; ">------------------------------------------------------------------------</span><span style="color: #008000; "><br></span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;Composition<br>{<br></span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">:<br>&nbsp;&nbsp;&nbsp;&nbsp;Composition(Compositor&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;repair();<br><br></span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">:<br>&nbsp;&nbsp;&nbsp;&nbsp;Compositor&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">_compositor;<br>&nbsp;&nbsp;&nbsp;&nbsp;Component&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">_components;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;_componentCount;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;_lineWidth;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">_lineBreaks;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;_lineCount;<br>};<br><br></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;Composition::repair()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;Coord&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">natural;<br>&nbsp;&nbsp;&nbsp;&nbsp;Coord&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">stretchability;<br>&nbsp;&nbsp;&nbsp;&nbsp;Coord&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">shrinkability;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;componentCount;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">breaks;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">prepare&nbsp;the&nbsp;arrays&nbsp;with&nbsp;the&nbsp;desired&nbsp;component&nbsp;sizes<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; "><img src="http://www.cppblog.com/Images/dot.gif"><br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">determine&nbsp;where&nbsp;the&nbsp;breaks&nbsp;are:</span><span style="color: #008000; "><br></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;breakCount;<br>&nbsp;&nbsp;&nbsp;&nbsp;breakCount&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;_compositor</span><span style="color: #000000; ">-&gt;</span><span style="color: #000000; ">compose(natural,&nbsp;stretchability,&nbsp;shrinkability,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;componentCount,&nbsp;_lineWidth,&nbsp;breaks);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">lay&nbsp;out&nbsp;components&nbsp;according&nbsp;to&nbsp;breaks<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; "><img src="http://www.cppblog.com/Images/dot.gif"></span><span style="color: #008000; "><br></span><span style="color: #000000; ">}<br><br></span><span style="color: #008000; ">//</span><span style="color: #008000; ">--------------------------------------------------------------------<br></span><span style="color: #008000; ">//</span><span style="color: #008000; ">subclass&nbsp;of&nbsp;Compositor</span><span style="color: #008000; "><br></span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;SimpleCompositor&nbsp;:&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;Compositor<br>{<br></span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">:<br>&nbsp;&nbsp;&nbsp;&nbsp;SimpleCompositor();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">virtual</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;compose(Coord&nbsp;natural[],&nbsp;Coord&nbsp;stretch[],&nbsp;Coord&nbsp;shrink[],<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;componentCount,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;lineWidth,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;breaks);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; "><img src="http://www.cppblog.com/Images/dot.gif"></span><span style="color: #008000; "><br></span><span style="color: #000000; ">};<br><br></span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;TeXCompositor&nbsp;:&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;Compositor<br>{<br></span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">:<br>&nbsp;&nbsp;&nbsp;&nbsp;TeXCompositor();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">virtual</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;compose(Coord&nbsp;natural[],&nbsp;Coord&nbsp;stretch[],&nbsp;Coord&nbsp;shrink[],<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;componentCount,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;lineWidth,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;breaks);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; "><img src="http://www.cppblog.com/Images/dot.gif"></span><span style="color: #008000; "><br></span><span style="color: #000000; ">};<br><br></span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;ArrayCompositor&nbsp;:&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;Compositor<br>{<br></span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">:<br>&nbsp;&nbsp;&nbsp;&nbsp;ArrayCompositor();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">virtual</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;compose(Coord&nbsp;natural[],&nbsp;Coord&nbsp;stretch[],&nbsp;Coord&nbsp;shrink[],<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;componentCount,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;lineWidth,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;breaks);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; "><img src="http://www.cppblog.com/Images/dot.gif"></span><span style="color: #008000; "><br></span><span style="color: #000000; ">};<br><br></span><span style="color: #008000; ">//</span><span style="color: #008000; ">-----------------------------------------<br></span><span style="color: #008000; ">//</span><span style="color: #008000; ">using&nbsp;example</span><span style="color: #008000; "><br></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; "><img src="http://www.cppblog.com/Images/dot.gif"></span><span style="color: #008000; "><br></span><span style="color: #000000; "><br>&nbsp;&nbsp;&nbsp;&nbsp;Composition&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">quick&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;Composition(</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;SimpleCompositor);<br>&nbsp;&nbsp;&nbsp;&nbsp;Composition&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">slick&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;Composition(</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;TeXCompositor);<br>&nbsp;&nbsp;&nbsp;&nbsp;Composition&nbsp;</span><span style="color: #000000; ">*</span><span style="color: #000000; ">iconic&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;Composition(</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;ArrayCompositor);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; "><img src="http://www.cppblog.com/Images/dot.gif">.</span><span style="color: #008000; "><br></span><span style="color: #000000; "><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br>}<br></span></div><img src ="http://www.cppblog.com/proyao/aggbug/128560.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/proyao/" target="_blank">Acaini.yaoyaozii</a> 2010-10-04 12:27 <a href="http://www.cppblog.com/proyao/archive/2010/10/04/128560.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>