做套现网站,网站的访问量,关键词竞价排名名词解释,想开发一个网站需要怎样做一 什么是 模板方法#xff08;Template Method#xff09;模式
在固定步骤确定的情况下#xff0c;通过多态机制在多个子类中对每个步骤的细节进行差异化实现#xff0c;这就是模板方法模式能够达到的效果。
模板方法模式属于#xff1a;行为型模式。 二 模板方法Template Method模式
在固定步骤确定的情况下通过多态机制在多个子类中对每个步骤的细节进行差异化实现这就是模板方法模式能够达到的效果。
模板方法模式属于行为型模式。 二 模板方法Template Method模式能解决什么样子的问题
在固定步骤确定的情况下。
通过多态机制在各个子类中实现每个步骤的具体细节。 举例
2020年1月1号A公司有一个小游戏项目组开始开发一款游戏——开发单机闯关打斗类游戏类似街机打拳类游戏。 游戏策划需求游戏主角都是个战士攻击力不够强生命值比较多抗揍主角通过不断的往前走来闯关遇到敌人就进行攻击 主角生命值——1000为0时主角死亡游戏结束魔法值——0暂时用不上保留攻击力——200打敌人一下敌人失去多少点声明值 三个属性。 //敌人也会反击敌人也会距离近时主动攻击主角。 //主角生命值——1000为0时主角死亡游戏结束魔法值——0暂时用不上保留攻击力——200打敌人一下敌人失去多少点声明值 三个属性。 //技能“燃烧”——使用该技能可以使附近所有敌人每人失去500点生命值但是主角自身也会损失掉300点生命值。 2020年2月1号游戏扩展增加 法师 作为主角 //增加 法师 作为主角攻击力很强生命值比较少不抗揍 //主角生命值——800魔法值——200暂时用不上保留攻击力——300 三个属性。 //技能“燃烧”——使用该技能可以使附近所有敌人每人失去650点生命值但是主角自身会损失掉100点魔法值。 2020年3月1号游戏扩展增加牧师 作为主角 //增加 牧师 作为主角攻击力很弱生命值比较少不抗揍 //主角生命值——300魔法值——500暂时用不上保留攻击力——200 三个属性。 //技能“燃烧”——使用该技能可以使附近所有敌人每人失去200点生命值给自身英雄恢复200点生命值但是主角自身会损失掉200点魔法值。 2020年4月1号, 还有扩展5.1还有扩展。。。。
我们能知道的是随着游戏的变化我们应该怎么设计呢我们和游戏策划讨论后规定后续不管有多少新加入的角色他的技能都可以分为如下的几种
1.对于敌人的影响
2.对于自己数值的影响包括友军
3.动画效果在这里假定只有一种动画这里只是想处理没有 差别的具体的方法实现实际开发过程中每次打击的动画效果都应该不一样才合理
4.自身特殊的技能例如节假日搞的一些活动 由于技能攻击行为的每一个步骤都是确定的那么 针对 这个攻击的行为我们在这里使用 模版方法来完成 三 模板方法Template Method模式的一般实现 // 001templatemethod.cpp : 此文件包含 main 函数。程序执行将在此处开始并结束。
// 模版方法模式
//战士主角生命值——1000为0时主角死亡游戏结束魔法值——0暂时用不上保留攻击力——200打敌人一下敌人失去多少点声明值 三个属性。//技能“燃烧”——使用该技能可以使附近所有敌人每人失去500点生命值但是主角自身也会损失掉300点生命值。//法师主角攻击力很强生命值比较少不抗揍//主角生命值——800魔法值——200暂时用不上保留攻击力——300 三个属性。 //技能“燃烧”——使用该技能可以使附近所有敌人每人失去650点生命值但是主角自身会损失掉100点魔法值。
//注意在此程序中我们只是用了 生命值魔法值和“燃烧”技能的参数目的是为了学习 “模版方法”。#include iostream
#include string
#include crtdbg.h
using namespace std;//Hero 为父类代表每个英雄的共同点
class Hero {public:Hero(string name,int left,int magic):m_name(name),m_left(left),m_magic(magic) {}virtual ~Hero() {}public://1.对于敌人的影响
// 2.对于自己数值的影响包括友军
// 3.动画效果在这里假定只有一种动画这里只是想处理没有 差别的具体的方法实现实际开发过程中每次打击的动画效果都应该不一样才合理
// 4.自身特殊的技能例如节假日搞的一些活动void JNattack() {if (!canuseJN()) {return;}effortEnemy();effortSelf();animation_effects();selfCustomize();}private:virtual void effortEnemy()0;virtual void effortSelf()0;void animation_effects() {cout Heros animation_effects endl;}virtual void selfCustomize()0;virtual bool canuseJN()0;protected:string m_name; //名字int m_left; //生命值int m_magic;// 蓝量
};//1.战士class zhanshiHero :public Hero {
public :zhanshiHero(string name, int left, int magic) :Hero(name, left, magic) {}private:virtual void effortEnemy() {cout zhanshiHero JNattack effortEnemy endl;}virtual void effortSelf() {cout zhanshiHero JNattack effortSelf left-200 endl;m_left - 300;}virtual void selfCustomize() {cout zhanshiHero JNattack selfCustomize something endl;}virtual bool canuseJN() {if (this-m_left - 300 0) {cout zhanshi 血量剩余 this-m_left 可以使用技能 endl;return true;}else {cout zhanshi 血不够300无法使用技能 血量剩余 this-m_left endl;return false;}}
};//2.法师class fashiHero :public Hero {
public:fashiHero(string name, int left, int magic) :Hero(name, left, magic) {}private:virtual void effortEnemy() {cout fashiHero JNattack effortEnemy endl;}virtual void effortSelf() {cout fashiHero JNattack effortSelf magic-100 endl;m_magic - 100;}virtual void selfCustomize() {cout fashiHero JNattack selfCustomize something endl;}virtual bool canuseJN() {if (this-m_magic - 100 0) {cout fashi 蓝量剩余 this-m_magic 可以使用技能 endl;return true;}else {cout fashi 蓝量剩余 this-m_magic 无法使用技能 endl;return false;}}
};int main()
{std::cout Hello World!\n;zhanshiHero *pherozs new zhanshiHero(zszhangsan, 1000, 0);Hero *pherofs new fashiHero(fslisi, 800, 200);//Hero *pherofs1111111111 new fashiHero(aaaa, 80880, 2800);pherozs-JNattack();pherozs-JNattack();pherozs-JNattack();pherozs-JNattack();pherozs-JNattack();cout ---------------- endl;pherofs-JNattack();pherofs-JNattack();pherofs-JNattack();cout ---------******************------- endl;delete pherozs;delete pherofs;_CrtDumpMemoryLeaks();return 1;
} 四 模板方法Template Method模式的扩展