在介紹策略模式之前,我們先來看看多型性。多型性很好理解,策略模式就是在多型性的基礎上進行修改。
1.首先定義個父類,定義了所有的函式介面,但不去實現它。
假設父類名為cstrategy,這裡設計為抽象類
#pragma once
class cstrategy;
#include "strategy.h"
cstrategy::cstrategy(void)
cstrategy::~cstrategy(void)
再定義兩個子類,具體實現如下:
#pragma once
#include "strategy.h"
#include class cstrategyone :
public cstrategy;
#include "strategyone.h"
cstrategyone::cstrategyone(void)
cstrategyone::~cstrategyone(void)
void cstrategyone::operation()
#pragma once
#include "strategy.h"
#include class cstrategytwo :
public cstrategy;
#include "strategytwo.h"
cstrategytwo::cstrategytwo(void)
cstrategytwo::~cstrategytwo(void)
void cstrategytwo::operation()
實現呼叫過程
cstrategy *p1=new cstrategyone();
p1->operation();
cstrategy *p2=new cstrategytwo();
p2->operation();
這就是乙個多型的實際呼叫,很簡單,策略模式就是對多型封裝乙個類就行了,然後傳入不同的引數即可
2.定義乙個環境類,在環境類裡面傳入乙個物件,策略類裡面封裝同樣的方法。
#pragma once
#include "strategy.h"
class ccontext;
ccontext::ccontext(cstrategy *pstrategy):m_pstratey(pstrategy) //傳入策略物件
ccontext::~ccontext(void)
void ccontext::operation()
3.實際呼叫
ccontext *p1=new ccontext(new cstrategyone); //傳入不同的物件
p1->operation(); //具體操作
ccontext *p2=new ccontext(new cstrategytwo);
p2->operation();
設計模式之策略模式 Strategy
策略模式 定義了演算法家族,分別封裝起來,讓它們之間可以互相替換,此模式讓演算法的變化,不會影響到使用演算法的客戶 只要在分析過程中聽到需要在不同時間應用不同的業務規則,就可以考慮使用策略模式處理這種變化的可能性 涉及三個角色 環境 context 角色 持有乙個strategy的引用,通過條件來分...
設計模式之 Strategy 策略模式
策略模式簡述 優點 1 可以動態的改變物件的行為 缺點 1 客戶端必須知道所有的策略類,並自行決定使用哪乙個策略類 2 策略模式將造成產生很多策略類 今天本人實現的主要是 策略模式之comparable和comparator介面。用大白話說,就是我們在比較大小的時候,在類中定義乙個策略的比較器,由該...
設計模式之策略模式(Strategy)
定義 策略模式定義並封裝了一系列演算法,它們之間可以相互替換,且演算法的變化不會對演算法的使用者造成影響。優點 靈活替換,復用性強 完美支援開閉原則。缺點 過多的策略拓展會使 變得複雜,不容易理解。從定義中可以得知該模式會定義一系列的演算法,這裡需要考慮到開閉原則使用介面 實現的方式進行拓展 而演算...