策略模式-c++

00基础:抽象 封装 多态 继承

00原则:封装变化

      多用组合, 少用继承

      针对接口编程, 不针对实现编程

策略模式:定义算法族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。

UML类图: 角色与武器



具体类的实现:

class character
{
private:
	weapon *pweapon;
public:
	character(weapon *DetailWeapon);
	virtual void characterWeapon();
	virtual ~character();
};


#include "character.h"


character::character(weapon *DetailWeapon)
{
	pweapon = DetailWeapon;
}

void character::characterWeapon()
{
	pweapon->useWeapon();
}
character::~character()
{
}

class weapon
{
public:
	weapon();
	virtual void useWeapon()=0;
	virtual ~weapon()=0;
};


class KnifeBehavior :
	public weapon
{
public:
	KnifeBehavior();
	~KnifeBehavior();
	void useWeapon();
};

#include "KnifeBehavior.h"

KnifeBehavior::KnifeBehavior()
{
}

KnifeBehavior::~KnifeBehavior()
{
}


void KnifeBehavior::useWeapon()
{
	std::cout << "我用匕首" << std::endl;
}

#pragma once
#include "weapon.h"
class StickBeharive :
	public weapon
{
public:
	StickBeharive();
	~StickBeharive();
	void useWeapon();
};

void StickBeharive::useWeapon()
{
	std::cout << "我用木棍" << std::endl;
}

#pragma once
#include "weapon.h"
class SwordBehavior :
	public weapon
{
public:
	SwordBehavior();
	~SwordBehavior();
	void useWeapon();
};

void SwordBehavior::useWeapon()
{
	std::cout << "我用剑" << std::endl;
}

//主函数

#include "stdafx.h"
#include "weapon.h"
#include "KnifeBehavior.h"
#include "character.h"
#include "StickBeharive.h"
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	//cout << "我" << endl;
	weapon * p = new KnifeBehavior();
	character object = character(p);
	object.characterWeapon();
	delete p;
	p = NULL;

	p = new StickBeharive();
	object = character(p);
	object.characterWeapon();
	cin.get();
	
	delete p;
	p = NULL;
	return 0;
}

//运行效果



OK.

<<有时候缺的不是方法,而是一往无前的勇气>>.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值