C 設計模式之Strategy(策略模式)

2021-08-21 14:09:20 字數 1624 閱讀 4305

在介紹策略模式之前,我們先來看看多型性。多型性很好理解,策略模式就是在多型性的基礎上進行修改。

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)

定義 策略模式定義並封裝了一系列演算法,它們之間可以相互替換,且演算法的變化不會對演算法的使用者造成影響。優點 靈活替換,復用性強 完美支援開閉原則。缺點 過多的策略拓展會使 變得複雜,不容易理解。從定義中可以得知該模式會定義一系列的演算法,這裡需要考慮到開閉原則使用介面 實現的方式進行拓展 而演算...