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.
<<有时候缺的不是方法,而是一往无前的勇气>>.