您的位置:首页 > 教育 > 培训 > C++策略模式:萧炎打架~

C++策略模式:萧炎打架~

2024/10/6 12:24:27 来源:https://blog.csdn.net/ZY52678/article/details/141183271  浏览:    关键词:C++策略模式:萧炎打架~

目录

    • 策略模式
    • 步骤
    • 例子:萧炎使用技能打架
      • 给出UML图
      • 1:定义技能策略
      • 2:实现技能策略
      • 3:定义萧炎类
      • 4:萧炎遇到强劲的敌人
      • 5:战斗过程

在这里插入图片描述

策略模式

策略模式是一种行为设计模式,它定义了一系列算法,并将每一个算法封装起来,使它们可以互换使用。策略模式让算法的变化独立于使用算法的客户

步骤

1:定义策略接口:创建一个抽象基类或接口,定义所有支持的算法必须实现的方法。
2:实现具体策略:为每个算法创建具体的策略类,这些类实现第一步中定义的接口。
3:定义上下文环境:创建一个环境类,该类使用策略接口作为其成员变量,允许在运行时更改策略。
4:配置和使用:创建具体的策略对象和上下文对象,并将策略对象传递给上下文对象。

例子:萧炎使用技能打架

给出UML图

Implements
Implements
Implements
Implements
Implements
Implements
Implements
Uses
abstractSkillStrategy
+fight()
+virtual ~abstractSkillStrategy()
firstSkill
+fight()
secondSkill
+fight()
thirdSkill
+fight()
fourthSkill
+fight()
fifthSkill
+fight()
sixthSkill
+fight()
finalSkill
+fight()
xiaoYan
-abstractSkillStrategy* m_strategy
+fight(enemyLevel)
+~xiaoYan()

1:定义技能策略

class abstractSkillStrategy {
public:virtual void fight() = 0;virtual ~abstractSkillStrategy() { };
};

2:实现技能策略

class firstSkill :public abstractSkillStrategy {
public:void fight() {cout << "吸掌~" << endl;}
};
class secondSkill :public abstractSkillStrategy {
public:void fight() {cout << "吹火掌~" << endl;}
};
class thirdSkill :public abstractSkillStrategy {
public:void fight() {cout << "八极崩~" << endl;}
};
class fourthSkill :public abstractSkillStrategy {
public:void fight() {cout << "焰分噬浪尺~" << endl;}
};
class fifthSkill :public abstractSkillStrategy {
public:void fight() {cout << "三千雷动~~三千雷幻身" << endl;}
};
class sixthSkill :public abstractSkillStrategy {
public:void fight() {cout << "天火三玄变~" << endl;cout << "第一变:紫变~" << endl;cout << "第二变:琉璃变~" << endl;cout << "第三变:三千莲心火变~" << endl;}
};
class finalSkill :public abstractSkillStrategy {
public:void fight() {cout << "毁灭火莲~" << endl;}
};

3:定义萧炎类

enum class enemyLevel:char{First,Second,Third,Fourth,Fifth,Sixth,Final};
class xiaoYan {
public:void fight(enemyLevel level) {if (m_strategy) {delete m_strategy;m_strategy = nullptr;}switch (level) {case enemyLevel::First:m_strategy = new firstSkill;break;case enemyLevel::Second:m_strategy = new secondSkill;break;case enemyLevel::Third:m_strategy = new thirdSkill;break;case enemyLevel::Fourth:m_strategy = new fourthSkill;break;case enemyLevel::Fifth:m_strategy = new fifthSkill;break;case enemyLevel::Sixth:m_strategy = new sixthSkill;break;case enemyLevel::Final:m_strategy = new finalSkill;break;default:break;}m_strategy->fight();}~xiaoYan(){delete m_strategy;}
private:abstractSkillStrategy* m_strategy = nullptr;
};

4:萧炎遇到强劲的敌人

int main() {xiaoYan* xiaoyan = new xiaoYan;cout << "萧炎遇到了敌人~~" << endl;xiaoyan->fight(enemyLevel::First);cout << "敌人毫发无损:就这~" << endl;xiaoyan->fight(enemyLevel::Second);cout << "敌人后退一步:呵呵~" << endl;xiaoyan->fight(enemyLevel::Third);cout << "敌人头发被崩断一根:有点东西~小子" << endl;xiaoyan->fight(enemyLevel::Fourth);cout << "敌人使出技能格挡,后退10米:这就是你的全部实力了吗?" << endl;xiaoyan->fight(enemyLevel::Fifth);cout << "敌人摸不到:你是风雷阁的人?" << endl;cout << "敌人愤怒,使出变异功法提升实力~" << endl;xiaoyan->fight(enemyLevel::Sixth);cout << "敌人:拿命来~~~~" << endl;cout << "使用三千雷动疯狂躲闪~~" << endl;cout << "手搓火莲成功!!" << endl;xiaoyan->fight(enemyLevel::Final);cout << "敌人头接火莲~~额,后果你懂的!" << endl;return 0;
}

5:战斗过程

在这里插入图片描述

萧炎遇到了敌人~~
吸掌~
敌人毫发无损:就这~
吹火掌~
敌人后退一步:呵呵~
八极崩~
敌人头发被崩断一根:有点东西~小子
焰分噬浪尺~
敌人使出技能格挡,后退10米:这就是你的全部实力了吗?
三千雷动~~三千雷幻身
敌人摸不到:你是风雷阁的人?
敌人愤怒,使出变异功法提升实力~
天火三玄变~
第一变:紫变~
第二变:琉璃变~
第三变:三千莲心火变~
敌人:拿命来~~~~
使用三千雷动疯狂躲闪~~
手搓火莲成功!!
毁灭火莲~
敌人头接火莲~~额,后果你懂的!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com