策略模式

策略模式UML
#pragma once
#include <iostream>
#include <Windows.h>
using namespace std;
class Beat_Boss
{
public:
virtual void Handle() = NULL;
};
class Beat_Boss_A : public Beat_Boss
{
public:
virtual void Handle(){ cout << "打败BossA,掉落紫装" << endl;}
};
class Beat_Boss_B : public Beat_Boss
{
public:
virtual void Handle(){ cout << "打败BossB,掉落神装" << endl;}
};
class Strategy_Factory
{
public:
Strategy_Factory(Beat_Boss* param):boss(param){}
int Do()
{
if(NULL == boss)
{
cout << "请先注册执行策略" << endl;
return 0;
}
boss->Handle();
return 1;
}
int Set(Beat_Boss* param)
{
if(param != this->boss)
{
boss = param;
return 1;
}
return 0;
}
private:
Beat_Boss* boss;
};
int main()
{
Beat_Boss_A* Boss_A = new Beat_Boss_A;
Strategy_Factory factory(Boss_A);
factory.Do();
Beat_Boss_B* Boss_B = new Beat_Boss_B;
factory.Set(Boss_B);
factory.Do();
system("pause");
return 1;
}
优点
缺点