深刻解析C++編程中對設計形式中的戰略形式的應用。本站提示廣大學習愛好者:(深刻解析C++編程中對設計形式中的戰略形式的應用)文章只能為提供參考,不一定能成為您想要的結果。以下是深刻解析C++編程中對設計形式中的戰略形式的應用正文
戰略形式也是一種異常經常使用的設計形式,並且也不龐雜。上面我們就來看看這類形式。
界說:戰略形式界說了一系列的算法,並將每個算法封裝起來,並且使它們還可以互相調換。戰略形式讓算法自力於應用它的客戶而自力變更。
腳色:
UML圖:
例子:
#include <iostream> using namespace std; class WeaponBehavior { public: void virtual useWeapon() = 0; }; class AK47:public WeaponBehavior { public: void useWeapon() { cout << "Use AK47 to shoot!" << endl; } }; class Knife:public WeaponBehavior { public: void useWeapon() { cout << "Use Knife to kill!" << endl; } }; class Character { public: Character() { weapon = 0; } void setWeapon(WeaponBehavior *w) { this->weapon = w; } void virtual fight() = 0; protected: WeaponBehavior *weapon; }; class King:public Character { public: void fight() { cout << "The king:" ; if ( this->weapon == NULL) { cout << "You don't have a weapon! Please Set Weapon!" << endl; } else { weapon->useWeapon(); } } }; int main() { WeaponBehavior *ak47 = new AK47(); WeaponBehavior *knife = new Knife(); Character *kin = new King(); kin->fight(); cout << endl; kin->setWeapon(ak47); kin->fight(); cout << endl; kin->setWeapon(knife); kin->fight(); return 0; }
實用性:
1,多個類只差別在表示行動分歧,可使用Strategy形式,在運轉時靜態選擇詳細要履行的行動。
2,須要在分歧情形下應用分歧的戰略(算法),或許戰略還能夠在將來用其它方法來完成。
3,對客戶隱蔽詳細戰略(算法)的完成細節,彼此完整自力。
優缺陷:
長處:
1,戰略形式供給了治理相干的算法族的方法。戰略類的品級構造界說了一個算法或行動族。適當應用繼續可以把公共的代碼移到父類外面,從而防止代碼反復。
2,應用戰略形式可以免應用多重前提(if-else)語句。多重前提語句不容易保護,它把采用哪種算法或采用哪種行動的邏輯與算法或行動的邏輯混雜在一路,一切列在一個多重前提語句外面,比應用繼續的方法還要原始和落伍。
缺陷:
1,客戶端必需曉得一切的戰略類,並自行決議應用哪個戰略類。這就意味著客戶端必需懂得這些算法的差別,以便合時選擇適當的算法類。換言之,戰略形式只實用於客戶端曉得算法或行動的情形。
2,因為戰略形式把每一個詳細的戰略完成都零丁封裝成為類,假如備選的戰略許多的話,那末對象的數量就會很可不雅。
和其他設計形式的差別:
1,與狀況形式
在處理的成績上,狀況形式是處理內涵狀況的轉變,而戰略形式是處理外部算法的轉變。在處理的辦法上,狀況形式是自我掌握狀況的轉變,而戰略形式是由內部制訂應用應用啥戰略。
2,簡略工場形式
簡略工場形式是創立型形式,存眷對象的創立。戰略形式是行動型形式,存眷行動的封裝。簡略工場形式是依據分歧的前提前往一個合適的類給你應用,然後挪用者應用工場類前往的類去完成響應的操作。而戰略形式是必需起首創立一個想應用的類實例,然後實例被看成參數傳遞出來,既而經由過程該實例去挪用不消的算法。在簡略工場形式中完成了經由過程前提拔取一個類去實例化對象,戰略形式則將拔取響應對象的任務交給形式的應用者,它自己不去做拔取任務。