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();
}