关键决策——策略模式

策略模式

在这里插入图片描述

策略模式UML

策略模式是指对象有某个行为,但是在不同的场景下,该行为有不同的处理方式。比如说玩游戏打Boss,打败不同的Boss程序会做出不同的奖励。

#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;
}

优点

1.在策略类大家庭中,虽然实现算法功能存在差异,但是公共部分可以放到父类实现,通过继承减轻代码的冗余。
2.避免了像简单工厂模式那样通过多重判断来选择使用哪一个类。

缺点

客户端必须知道所有的策略类,并自行决定使用哪一个策略类。也就是说策略类暴露给了客户端。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值