設計模式-Strategy 模式

來源:互聯網
上載者:User

設計模式-Strategy 模式

   1. 解決的問題:假如現在要編寫一個射擊類小遊戲, 遊戲裡面有不同層級的遊戲角色, 這些角色可以使用不同的武器.   2. 問題分析:角色應該可以動態更換武器, 今後可能增加其他的角色或者其他種類的武器.根據"將可變的部分分離出來,單獨封裝"的原則, 需要將武器從角色中分離出來, 單獨封裝.  3. UML圖:
  4. 代碼實現:#include <iostream><br />using namespace std;</p><p>// Strategy<br />class Weapon<br />{<br />public:<br /> virtual void Fire() = 0;<br />};</p><p>class WeaponA: public Weapon<br />{<br /> void Fire()<br /> {<br /> cout << "Weapon A is used now!" << endl;<br /> }<br />};</p><p>class WeaponB: public Weapon<br />{<br /> void Fire()<br /> {<br /> cout << "Weapon B is used now!" << endl;<br /> }<br />};</p><p>class WeaponC: public Weapon<br />{<br /> void Fire()<br /> {<br /> cout << "Weapon C is used now!" << endl;<br /> }<br />};</p><p>//Client<br />class Role<br />{<br />public:<br /> void ChangeWeapon(Weapon *wp)<br /> {<br /> m_weapon = wp;<br /> }</p><p> void UseWeapon()<br /> {<br /> m_weapon->Fire();<br /> }</p><p>private:<br /> Weapon *m_weapon;<br />};</p><p>class RoleA: public Role<br />{</p><p>};</p><p>// Main Program<br />int main()<br />{<br /> RoleA *p_ra = new RoleA();<br /> p_ra->ChangeWeapon(new WeaponA());<br /> p_ra->UseWeapon();<br /> p_ra->ChangeWeapon(new WeaponB());<br /> p_ra->UseWeapon();<br /> p_ra->ChangeWeapon(new WeaponC());<br /> p_ra->UseWeapon();<br /> return 0;<br />}   5. 總結:   1. Strategy 模式定義:      定義一系列的演算法,把他們一個個封裝起來,並且使它們可相互替換。Strategy模式使演算法可獨立於使用它的客戶而變化。    2. 體現的設計原則:
  • 將可變部分分離出來單獨封裝;
  • 多使用組合,少使用繼承;
  • 面向介面編程,而不面向實現編程;
   3. UML圖:   4. 要點:
  • Strategy 基類需要定義出可供Client使用的一些演算法介面;
  • 可以隨時根據需要增加 Strategy 而不會影響到Client;
  • Client 裡面需要包含對 Strategy 的引用;
  • Client 可以隨時更換 Strategy;
6. 理解:
  • 繼承的作用有兩個:
    ->代碼複用;
    ->讓不同的東西可以具有同種類型;
  • 面向介面編程,是指面向基類編程, 利用基類提供的介面編程而不是利用繼承下來的那些具體的子類編程;

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.