目录
- 策略模式
- 步骤
- 例子:萧炎使用技能打架
- 给出UML图
- 1:定义技能策略
- 2:实现技能策略
- 3:定义萧炎类
- 4:萧炎遇到强劲的敌人
- 5:战斗过程
策略模式
策略模式是一种行为设计模式,它定义了一系列算法,并将每一个算法封装起来,使它们可以互换使用。策略模式让算法的变化独立于使用算法的客户
步骤
1:定义策略接口:创建一个抽象基类或接口,定义所有支持的算法必须实现的方法。
2:实现具体策略:为每个算法创建具体的策略类,这些类实现第一步中定义的接口。
3:定义上下文环境:创建一个环境类,该类使用策略接口作为其成员变量,允许在运行时更改策略。
4:配置和使用:创建具体的策略对象和上下文对象,并将策略对象传递给上下文对象。
例子:萧炎使用技能打架
给出UML图
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米:这就是你的全部实力了吗?
三千雷动~~三千雷幻身
敌人摸不到:你是风雷阁的人?
敌人愤怒,使出变异功法提升实力~
天火三玄变~
第一变:紫变~
第二变:琉璃变~
第三变:三千莲心火变~
敌人:拿命来~~~~
使用三千雷动疯狂躲闪~~
手搓火莲成功!!
毁灭火莲~
敌人头接火莲~~额,后果你懂的!