Strategy

// Strategy.h

#ifndef _STRATEGY_H

#define _STRATEGY_H

class Strategy {

public:

Strategy(int criminalWeight);

virtual void action() = 0;

private:

int criminalWeight;

public:

inline const int get_criminalWeight() const;

};

inline const int Strategy::get_criminalWeight() const {

return criminalWeight;

}

#endif

// CallPolicy.h

#include "CallPolicy.h"

CallPolicy::CallPolicy() : Strategy(85) {

}

void CallPolicy::action() {

cout << ""Call 911!" << endl;

}

說明

    • 設計『錦囊妙計』物件,依據不同處境調用『策略』物件。
    • Strategies 是『錦囊妙計』物件,依據罪犯體重不同,採取下列策略:
      • 體重 >= 85kg => 叫警察來處理。
      • 體重 <= 60kg =>直接扁他。
      • 體重 <= 70kg => 叫爸爸來處理。
      • 其他狀況 => 逃跑。

// Strategies.h

#ifndef _STRATEGIES_H

#define _STRATEGIES_H

#include "CallPolicy.h"

#include "FightBack.h"

#include "CallDaddy.h"

#include "Run.h"

class Strategies {

private:

CallPolicy callPolicy;

FightBack fightBack;

CallDaddy callDaddy;

Run run;

public:

action(int criminalWeight);

};

#endif

// Strategies.cpp

#include "Strategies.h"

Strategies::action(int criminalWeight) {

if (crinalWeight >= 85) callPolicy.action();

else if (crinalWeight <= 60) fightBack.action();

else if (crinalWeight <= 70) callDaddy.action();

else run.action();

}