問題:
在我們生活中,我們的做的事情都有一些共性,例如,很多事情都有類似的操作過程,這些東西應用到程式設計中也是一樣的;如果我們把每件事情都抽象成乙個類,這樣會有大量重複的工作;
解決方案:
我們把這些演算法的邏輯抽象成乙個類,把具體的演算法實現抽象到乙個介面(c++
就是純虛類,純虛類與虛基的差別:前者是有乙個純虛函式,後者有乙個公共基類,為了避免回合的時候產生多個副本)。讓這個邏輯類來組合這個介面,然後把實現演算法的類委託給這個介面。這就是策略模式;
strategy和
template
辨析:
strategy和
template
都是解決這類問題的方法,他們從不同的方式來解決;
strategy
用的是組合方式。把具體實現組合到邏輯抽象中。而
template
用的是繼承方式,邏輯抽象和介面放到基類。通過繼承方式,把實現放到子類中;
源**:
#include using namespace std;
class strategy
protected:
strategy(){} };
class concreatestrategy1:public strategy
content(strategy *str)
~content()
} void setstrategy(strategy *str)
else
strategy=str;
}private:
strategy *strategy;
};void main()
;
設計模式之策略模式 Strategy
策略模式 定義了演算法家族,分別封裝起來,讓它們之間可以互相替換,此模式讓演算法的變化,不會影響到使用演算法的客戶 只要在分析過程中聽到需要在不同時間應用不同的業務規則,就可以考慮使用策略模式處理這種變化的可能性 涉及三個角色 環境 context 角色 持有乙個strategy的引用,通過條件來分...
設計模式之 Strategy 策略模式
策略模式簡述 優點 1 可以動態的改變物件的行為 缺點 1 客戶端必須知道所有的策略類,並自行決定使用哪乙個策略類 2 策略模式將造成產生很多策略類 今天本人實現的主要是 策略模式之comparable和comparator介面。用大白話說,就是我們在比較大小的時候,在類中定義乙個策略的比較器,由該...
設計模式之策略模式(Strategy)
定義 策略模式定義並封裝了一系列演算法,它們之間可以相互替換,且演算法的變化不會對演算法的使用者造成影響。優點 靈活替換,復用性強 完美支援開閉原則。缺點 過多的策略拓展會使 變得複雜,不容易理解。從定義中可以得知該模式會定義一系列的演算法,這裡需要考慮到開閉原則使用介面 實現的方式進行拓展 而演算...