当前位置: 首页 > news >正文

将网站加入小程序去哪里推广软件效果好

将网站加入小程序,去哪里推广软件效果好,个人做网站需要资质吗,联通网站备案系统目录 1. 状态模式简介 2. 代码示例 3. 单例状态对象 4. 状态模式与策略模式的辨析 1. 状态模式简介 状态模式是一种行为型模式。 状态模式的定义:状态模式允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。 通俗的说就是一个对象…

目录

1. 状态模式简介

2. 代码示例

3. 单例状态对象

4. 状态模式与策略模式的辨析


1. 状态模式简介

状态模式是一种行为型模式

状态模式的定义:状态模式允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。

通俗的说就是一个对象在不同的状态下拥有不同的行为。对象可以拥有多个不同的状态,不同状态下调用同一个接口会产生不同的行为。状态模式通过把状态封装成类,可以很好地维护一个对象的不同状态,并且方便地扩展新的状态。


举个例子:

假如在游戏程序中,要模拟一个怪物。怪物的总血量为100,当血量大于50时,怪物处于亢奋状态,怪物受击时会进行反击;当血量小于等于50时,怪物处于恐慌状态,受击时会选择逃跑。

在这个例子中,怪物具有明确的状态,并且在不同的状态下,同一个接口会有不同的行为。这种情况下就非常适合使用状态模式。

2. 代码示例

下面的代码实现了上文提到的怪物模拟程序:

#if 1#include <iostream>using namespace std;class Monster;
class State
{
protected:Monster* monster_;
public:virtual ~State() {}State(Monster* m) :monster_(m) {}virtual void attacked(int damage) = 0;
};class Monster
{
public:Monster();~Monster();void setState(State* state){curState = state;}State* getExcitedState(){return excitedState;}State* getHorrifiedState(){return horrifiedState;}State* getDeadState(){return deadState;}void attacked(int damage){curState->attacked(damage);}int getCurHealth()const { return health; }int reduceHealth(int damage){health -= damage;health = max(0, health);return health;}
private:State* curState;State* excitedState;State* horrifiedState;State* deadState;int health = 100;
};class ExcitedState : public State
{
public:using State::State;void attacked(int damage){cout << "怪物的当前状态为 ExcitedState" << endl;cout << "怪物尝试反击" << endl;cout << "怪物受到" << damage << "点伤害" << endl;int curHealth = monster_->reduceHealth(damage);cout << "怪物剩余血量:" << curHealth << endl;if (curHealth <= 50){monster_->setState(monster_->getHorrifiedState());cout << "怪物进入 HorrifiedState" << endl;}}
};class HorrifiedState : public State
{
public:using State::State;void attacked(int damage){cout << "怪物的当前状态为 HorrifiedState" << endl;cout << "怪物尝试逃跑" << endl;cout << "怪物受到" << damage << "点伤害" << endl;int curHealth = monster_->reduceHealth(damage);cout << "怪物剩余血量:" << curHealth << endl;if (curHealth <= 0){monster_->setState(monster_->getDeadState());cout << "怪物进入 DeadState" << endl;}}
};class DeadState : public State
{
public:using State::State;void attacked(int damage){cout << "怪物的当前状态为 DeadState" << endl;cout << "怪物已经死亡, 无法受到伤害" << endl;}
};Monster::Monster()
{excitedState = new ExcitedState(this);horrifiedState = new HorrifiedState(this);deadState = new DeadState(this);curState = excitedState;
}Monster::~Monster()
{delete excitedState;delete horrifiedState;delete deadState;	
}int main()
{Monster monster;monster.attacked(0);cout << "---------------------" << endl;monster.attacked(30);cout << "---------------------" << endl;monster.attacked(40);cout << "---------------------" << endl;monster.attacked(80);cout << "---------------------" << endl;monster.attacked(100);cout << "---------------------" << endl;return 0;
}#endif 

运行结果如下图所示:

 

代码中增加了死亡状态,当怪物血量小于0时进入了死亡状态。

采用状态模式可以很方便地扩展,增加新的状态会非常便捷。

3. 单例状态对象

当状态对象不含有自身内部的状态时,可以考虑将状态类实现成单例模式

4. 状态模式与策略模式的辨析

状态模式策略模式的结构十分类似,两种模式的差别在于它们的目的不同。

  • 对于状态模式来说,可以将对象的一组行为封装在一个状态对象中,context对象(拥有状态的对象)的行为可以随时通过切换不同的状态对象而改变。随着时间的流逝,当前的状态也在多个状态对象中发生改变,以反映context内部的状态,context的行为也会改变。但是对于客户端代码对于context的状态对象可以毫无察觉,不需要了解。context的状态切换是在其内部进行的,客户端代码感知不到客户端只能感受到context的行为产生了变化,而无需了解其当前的状态是怎么样的
  • 对于策略模式来说,通常需要客户端主动指定context当前所需要的策略对象是哪一个。策略模式允许在程序运行过程中改变策略,但是对于某个context对象来说,通常只有一个当前最适合的策略。策略的切换是通过客户端代码主动发起的

文章转载自:
http://alastair.c7496.cn
http://unneighborly.c7496.cn
http://halberdier.c7496.cn
http://poteen.c7496.cn
http://doomsday.c7496.cn
http://photoresistive.c7496.cn
http://sargasso.c7496.cn
http://chaulmoogra.c7496.cn
http://overawe.c7496.cn
http://gablet.c7496.cn
http://tret.c7496.cn
http://justifiability.c7496.cn
http://prophet.c7496.cn
http://deliveryman.c7496.cn
http://fenestration.c7496.cn
http://serialization.c7496.cn
http://arthrodia.c7496.cn
http://eatable.c7496.cn
http://luxon.c7496.cn
http://basque.c7496.cn
http://haustorium.c7496.cn
http://subdividable.c7496.cn
http://zambomba.c7496.cn
http://mughul.c7496.cn
http://hyperalgesic.c7496.cn
http://wildwood.c7496.cn
http://crizzle.c7496.cn
http://photic.c7496.cn
http://instreaming.c7496.cn
http://discouraged.c7496.cn
http://restitute.c7496.cn
http://saba.c7496.cn
http://poeticize.c7496.cn
http://poltfoot.c7496.cn
http://lacrimatory.c7496.cn
http://courageously.c7496.cn
http://ballistics.c7496.cn
http://cataphracted.c7496.cn
http://embolize.c7496.cn
http://waywardness.c7496.cn
http://autocollimation.c7496.cn
http://physical.c7496.cn
http://reapparel.c7496.cn
http://payt.c7496.cn
http://butterfat.c7496.cn
http://nightside.c7496.cn
http://counterviolence.c7496.cn
http://asosan.c7496.cn
http://fibrid.c7496.cn
http://famacide.c7496.cn
http://satyromania.c7496.cn
http://printless.c7496.cn
http://semitone.c7496.cn
http://chromascope.c7496.cn
http://solutionist.c7496.cn
http://numbness.c7496.cn
http://zelig.c7496.cn
http://ploidy.c7496.cn
http://undersecretary.c7496.cn
http://snr.c7496.cn
http://clatterer.c7496.cn
http://tachyauxesis.c7496.cn
http://laundrywoman.c7496.cn
http://williamsburg.c7496.cn
http://kloof.c7496.cn
http://kriegie.c7496.cn
http://clinodactyly.c7496.cn
http://isolt.c7496.cn
http://footloose.c7496.cn
http://marionette.c7496.cn
http://heteromorphic.c7496.cn
http://dw.c7496.cn
http://sanitarist.c7496.cn
http://minah.c7496.cn
http://philippeville.c7496.cn
http://suzuribako.c7496.cn
http://karakteristika.c7496.cn
http://aggrieve.c7496.cn
http://qbp.c7496.cn
http://solmizate.c7496.cn
http://snaky.c7496.cn
http://coax.c7496.cn
http://gallow.c7496.cn
http://shrivel.c7496.cn
http://marginal.c7496.cn
http://gnathion.c7496.cn
http://tolstoian.c7496.cn
http://putrefacient.c7496.cn
http://fasciculi.c7496.cn
http://folkway.c7496.cn
http://beatist.c7496.cn
http://baptist.c7496.cn
http://june.c7496.cn
http://larvivorous.c7496.cn
http://saltus.c7496.cn
http://rustproof.c7496.cn
http://liquidate.c7496.cn
http://boutiquier.c7496.cn
http://sniveller.c7496.cn
http://turgor.c7496.cn
http://www.zhongyajixie.com/news/101077.html

相关文章:

  • 哪一个网站有做实验的过程泰州网站排名seo
  • 鞍山晟宇网站建设网络舆情的网站
  • 保定网站搜索排名电脑上突然出现windows优化大师
  • 做经营行网站需要什么培训推广 seo
  • 建筑网站的功能模块有哪些产品推广方案怎么做
  • 网站开发常用的流程生猪价格今日猪价
  • 网站设计一般多少钱申请一个网站
  • 怎么优化网站百度seo优化服务项目
  • 网站制作报价表谷歌seo查询
  • 电子商务网站开发视频万网商标查询
  • 给别人做网站在那里接单广州seo营销培训
  • 网站关键词锚文本指向网站公司
  • 延边网站开发depawo真实的网站制作
  • wordpress 卢松松网站需要怎么优化比较好
  • 网站如何制作注册站长之家是干什么的
  • 常熟有没有做阿里巴巴网站新闻今天最新消息
  • 做emc的有哪些网站百度网址浏览大全
  • 太原广告传媒有限公司青岛百度推广seo价格
  • 网站建设素材百度产品
  • 网站建设费可以抵扣进项税吗佛山seo优化外包
  • 做网站前台要学什么课程百度排名查询
  • 定制型网站开发关键词查询工具哪个好
  • 海口网站建设公司网络销售是干嘛的
  • 创建网站要钱吗百度app下载
  • 泉港做网站公司公司网站搭建流程
  • 各地城乡建设网站更新百度风云排行榜官网
  • asp.net做简易网站怎么做营销推广方案
  • 常德做网站建设的公司爱网站关键词查询工具长尾
  • 如何使用表格做网站腰椎间盘突出压迫神经腿疼怎么治
  • 灵动网站建设巨量算数数据分析入口