程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++設計模式實現--策略(Strategy)模式

C++設計模式實現--策略(Strategy)模式

編輯:C++入門知識

一. 舉例說明

以前做了一個程序,程序的功能是評價幾種加密算法時間,程序的使用操作不怎麼變,變的是選用各種算法。

結構如下:

\

AlgZ喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcml0aG2jurPpz/PA4KOszOG5qcvjt6i1xLmrubK907/aoaM8L3A+CjxwPgpSU0FfQWxnb3JpdGhto7q+38zltcRSU0HL47eooaM8L3A+CjxwPgpERVNfQWxnb3JpdGhto7q+38zltcRERVPL47eooaM8L3A+CjxwPgpCQVNFNjRfQWxnb3JpdGhto7q+38zltcRCYXNlNjTL47eooaM8L3A+CjxwPgrU2sq508O5/bPM1tCjrM7S1rvQ6NKqttTN4rmrsrxBbGdvcml0aG1fQ29udGV4dNXiuPbA4LywvdO/2ry0v8mhozxicj4KPC9wPgo8cD4KPHN0cm9uZz60+sLryrXP1qO6PC9zdHJvbmc+PC9wPgoKCgo8c3Ryb25nPltjcHBdPC9zdHJvbmc+IHZpZXcKIHBsYWluY29weQoKCgoKPG9sIHN0YXJ0PQ=="1" class="dp-cpp">

  • //策略類
  • class Algorithm
  • {
  • public:
  • virtual void calculate() = 0;
  • };
  • //具體RSA算法
  • class RSA_Algorithm : public Algorithm
  • {
  • public:
  • void calculate() { cout<<"RSA algorithm..."< };
  • //具體DES算法
  • class DES_Algorithm : public Algorithm
  • {
  • public:
  • void calculate() { cout<<"DES algorithm..."< };
  • //具體Base64算法
  • class BASE64_Algorithm: public Algorithm
  • {
  • public:
  • void calculate() { cout<<"Base64 algorithm..."< };
  • //策略上下文
  • class Algorithm_Context
  • {
  • private:
  • Algorithm *m_ra;
  • public:
  • Algorithm_Context(Algorithm *ra) { m_ra = ra; }
  • ~Algorithm_Context() { delete m_ra; }
  • void calculate() { m_ra->calculate(); }
  • };
  • //測試代碼
  • int main()
  • {
  • Algorithm_Context context(new RSA_Algorithm()); //使用具體算法
  • context.calculate();
  • return 0;
  • }

    一. 策略模式

    定義:它定義了算法家族,分別封裝起來,讓它們之間可以互相替換,此算法的變化,不會影響到使用算法的客戶。


    這裡的關鍵就是將算法的邏輯抽象接口(DoAction)封裝到一個類中(Context),再通過委托的方式將具體的算法實現委托給具體的 Strategy 類來實現(ConcreteStrategeA類)。

    策略模式是一種定義一系列算法的方法,從概念上來看,所有這些算法完成的都是相同的工作,只是實現不同,它可以以相同
    的方式調用所有的算法,減少了各種算法類與使用算法類之間的耦合。
    策略模式的優點是簡化了單元測試,因為每個算法都有自己的類,可以通過自己的接口單獨測試。
    策略模式就是用來封裝算法的,但在實踐中,我們發現可以用它來封裝幾乎任何類型的規則,只要在分析過程中聽到需要在不同實踐應用不同
    的業務規則,就可以考慮使用策略模式處理這種變化的可能性。


    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved