﻿<?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++博客-倚楼听风雨，淡看江湖路</title><link>http://www.cppblog.com/lostboy123/</link><description>朝花夕拾</description><language>zh-cn</language><lastBuildDate>Fri, 24 Apr 2026 09:33:59 GMT</lastBuildDate><pubDate>Fri, 24 Apr 2026 09:33:59 GMT</pubDate><ttl>60</ttl><item><title>设计模式-策略模式</title><link>http://www.cppblog.com/lostboy123/archive/2011/08/15/153435.html</link><dc:creator>小闵</dc:creator><author>小闵</author><pubDate>Mon, 15 Aug 2011 06:27:00 GMT</pubDate><guid>http://www.cppblog.com/lostboy123/archive/2011/08/15/153435.html</guid><wfw:comment>http://www.cppblog.com/lostboy123/comments/153435.html</wfw:comment><comments>http://www.cppblog.com/lostboy123/archive/2011/08/15/153435.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/lostboy123/comments/commentRss/153435.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/lostboy123/services/trackbacks/153435.html</trackback:ping><description><![CDATA[<div><div><div>// strategy.cpp : 定义控制台应用程序的入口点。</div><div>//</div><div></div><div>#include "stdafx.h"</div><div>/********************************************************************</div><div><span style="white-space:pre">	</span>created:<span style="white-space:pre">	</span>2011/08/15</div><div><span style="white-space:pre">	</span>created:<span style="white-space:pre">	</span>15:8:2011 &nbsp; 10:37</div><div><span style="white-space:pre">	</span>file base:<span style="white-space:pre">	</span>strategy</div><div><span style="white-space:pre">	</span>file ext:<span style="white-space:pre">	</span>cpp</div><div><span style="white-space:pre">	</span>author:<span style="white-space:pre">		</span>lost boy</div><div><span style="white-space:pre">	</span></div><div><span style="white-space:pre">	</span>purpose:<span style="white-space:pre">	</span>设计模式-策略模式</div><div></div><div><span style="white-space:pre">	</span>策略模式是指定义一系列的算法，把它们一个个封装起来，并且使它们可相互替换。</div><div><span style="white-space:pre">	</span>本模式使得算法可独立于使用它的客户而变化。也就是说这些算法所完成的功能一样，</div><div><span style="white-space:pre">	</span>对外的接口一样，只是各自实现上存在差异。用策略模式来封装算法，效果比较好。</div><div>*********************************************************************/</div><div></div><div>/*</div><div>电脑战术</div><div>*/</div><div>class BotsTactics</div><div>{</div><div>public:</div><div><span style="white-space:pre">	</span>virtual void DoTactics() = 0;</div><div></div><div>};</div><div></div><div>/*</div><div>吹风流</div><div>*/</div><div>class TacticsBlown : public BotsTactics</div><div>{</div><div>public:</div><div><span style="white-space:pre">	</span>void DoTactics()</div><div><span style="white-space:pre">	</span>{</div><div><span style="white-space:pre">		</span>printf("bot use Blown tactics\n");</div><div><span style="white-space:pre">	</span>}</div><div>};</div><div>/*</div><div>熊流</div><div>*/</div><div>class TacticsBears : public BotsTactics</div><div>{</div><div>public:</div><div><span style="white-space:pre">	</span>void DoTactics()</div><div><span style="white-space:pre">	</span>{</div><div><span style="white-space:pre">		</span>printf("bot use Bears tactics\n");</div><div><span style="white-space:pre">	</span>}</div><div>};</div><div></div><div>/*</div><div>塔流</div><div>*/</div><div>class TacticsTowerRush : public BotsTactics</div><div>{</div><div>public:</div><div><span style="white-space:pre">	</span>void DoTactics()</div><div><span style="white-space:pre">	</span>{</div><div><span style="white-space:pre">		</span>printf("bot use TowerRush tactics\n");</div><div><span style="white-space:pre">	</span>}</div><div>};</div><div></div><div>/*</div><div>也是直接通过参数指定，只不过不是传入指针，而是一个标签。</div><div>用户只需要知道标签</div><div>*/</div><div>enum TATICS {BLOWN, BEAR, TR}; //标签 &nbsp;</div><div>class Bots</div><div>{</div><div>private:</div><div></div><div><span style="white-space:pre">	</span>BotsTactics *pTatics_;</div><div>public:</div><div></div><div><span style="white-space:pre">	</span>Bots(enum TATICS ta)</div><div><span style="white-space:pre">	</span>{</div><div><span style="white-space:pre">		</span>if (ta == BLOWN)</div><div><span style="white-space:pre">			</span>pTatics_ = new TacticsBlown;</div><div><span style="white-space:pre">		</span>else if(ta == BEAR)</div><div><span style="white-space:pre">			</span>pTatics_ = new TacticsBears;</div><div><span style="white-space:pre">		</span>else if (ta == TR)</div><div><span style="white-space:pre">			</span>pTatics_ = new TacticsTowerRush;</div><div><span style="white-space:pre">		</span>else</div><div><span style="white-space:pre">			</span>pTatics_ = NULL;</div><div><span style="white-space:pre">	</span>}</div><div><span style="white-space:pre">	</span>~Bots()</div><div><span style="white-space:pre">	</span>{</div><div><span style="white-space:pre">		</span>if (pTatics_)</div><div><span style="white-space:pre">		</span>{</div><div><span style="white-space:pre">			</span>delete pTatics_;</div><div><span style="white-space:pre">			</span>pTatics_ = NULL;</div><div><span style="white-space:pre">		</span>}</div><div></div><div><span style="white-space:pre">	</span>};</div><div>public:</div><div><span style="white-space:pre">	</span>void DoTactics()</div><div><span style="white-space:pre">	</span>{</div><div><span style="white-space:pre">		</span>pTatics_-&gt;DoTactics();</div><div><span style="white-space:pre">	</span>}</div><div>};</div><div></div><div>/*</div><div>利用模板实现。算法通过模板的实参指定。</div><div>*/</div><div>template&lt;class ta&gt;</div><div>class templateBots</div><div>{</div><div>private:</div><div></div><div><span style="white-space:pre">	</span>ta ta_;</div><div>public:</div><div><span style="white-space:pre">	</span>templateBots(){}</div><div><span style="white-space:pre">	</span>~templateBots(){}</div><div>public:</div><div><span style="white-space:pre">	</span>void DoTactics()</div><div><span style="white-space:pre">	</span>{</div><div><span style="white-space:pre">		</span>ta_.DoTactics();</div><div><span style="white-space:pre">	</span>}</div><div>};</div><div>int _tmain(int argc, _TCHAR* argv[])</div><div>{</div><div><span style="white-space:pre">	</span>Bots bot(BLOWN);</div><div><span style="white-space:pre">	</span>bot.DoTactics();</div><div></div><div></div><div><span style="white-space:pre">	</span>templateBots&lt;TacticsTowerRush&gt; bot1;</div><div><span style="white-space:pre">	</span>bot1.DoTactics();</div><div><span style="white-space:pre">	</span>return 0;</div><div>}</div><div></div></div></div><img src ="http://www.cppblog.com/lostboy123/aggbug/153435.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/lostboy123/" target="_blank">小闵</a> 2011-08-15 14:27 <a href="http://www.cppblog.com/lostboy123/archive/2011/08/15/153435.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>