策略模式-c++

来源:互联网 发布:英语翻译兼职网站知乎 编辑:程序博客网 时间:2024/06/11 19:52

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
原创粉丝点击