0
点赞
收藏
分享

微信扫一扫

关键决策——策略模式

四月Ren间 2022-04-07 阅读 87

策略模式

在这里插入图片描述

策略模式UML

#pragma once
#include <iostream>
#include <Windows.h>

using namespace std;

//打败Boss处理基类
class Beat_Boss
{
public:
	virtual void Handle() = NULL;
};

//具体打败Boss_A处理子类
class Beat_Boss_A : public Beat_Boss
{
public:
	virtual void Handle(){ cout << "打败BossA,掉落紫装" << endl;}
};

//具体打败Boss_B处理子类
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()
{
	//选择A策略
	Beat_Boss_A* Boss_A = new Beat_Boss_A;
	Strategy_Factory factory(Boss_A);
	factory.Do();

	//选择B策略
	Beat_Boss_B* Boss_B = new Beat_Boss_B;
	factory.Set(Boss_B);
	factory.Do();

	system("pause");
	return 1;
}

优点

缺点

举报

相关推荐

0 条评论