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

长安区网站建设创建软件平台该怎么做

长安区网站建设,创建软件平台该怎么做,网站首页倒计时功能怎么做,宁波外包seo公司状态模式State 在组件构建过程中,某些对象的状态经常面临变化,如何对这些变化进行有效的管理?同时又维持高层模块的稳定?“状态变化”模式为这一问题提供了一种解决方案。 经典模式:State、Memento 动机&#xff08…

状态模式State

在组件构建过程中,某些对象的状态经常面临变化,如何对这些变化进行有效的管理?同时又维持高层模块的稳定?“状态变化”模式为这一问题提供了一种解决方案。

经典模式:State、Memento

动机(Motivation)

在软件构建过程中,某些对象的状态如何改变,其行为也随之而发生变化,比如文档处于只读状态,其支持的行为和读写状态支持的行为就可以完全不同。

如何在运行时根据对象的状态来透明地更改对象的行为?而不会为对象操作和状态转化之间引入耦合?

示例1


enum NetworkState
{Network_Open,Network_Close,Network_Connect,NetWork_Wait    // 新增状态
};class NetworkProcessor {NetworkState state_;public:void Operation1() {if (Network_Open == state_) {//***state_ = Network_Close;}else if(Network_Close == state_){//...state_ = Network_Connect;}else if (Network_Connect == state_) {//$$$state_ = Network_Open;}// 变化else if (NetWork_Wait == state_) {//---}}void Operation2() {if (Network_Open == state_) {//***state_ = Network_Connect;}else if (Network_Close == state_){//...state_ = Network_Open;}else if (Network_Connect == state_) {//$$$state_ = Network_Close;}// 变化else if (NetWork_Wait == state_) {//---}}void Operation3() {//...}
};

示例2


class NetworkState {
public:NetworkState* pNext;virtual void Operation1() = 0;virtual void Operation2() = 0;virtual void Operation3() = 0;virtual ~NetworkState() {}
};class OpenState : public NetworkState {static NetworkState* m_instance;public:static NetworkState* getInstance() {if (nullptr == m_instance) {m_instance = new OpenState();}return m_instance;}virtual void Operation1() {//***pNext = CloseState::getInstance();}virtual void Operation2() {//...pNext = ConnectState::getInstance();}virtual void Operation3() {//$$$pNext = OpenState::getInstance();}
};class CloseState : public NetworkState {static NetworkState* m_instance;public:static NetworkState* getInstance() {if (nullptr == m_instance) {m_instance = new CloseState();}return m_instance;}virtual void Operation1() {//***pNext = ConnectState::getInstance();}virtual void Operation2() {//...pNext = OpenState::getInstance();}virtual void Operation3() {//$$$pNext = CloseState::getInstance();}
};class ConnectState : public NetworkState {static NetworkState* m_instance;public:static NetworkState* getInstance() {if (nullptr == m_instance) {m_instance = new ConnectState();}return m_instance;}virtual void Operation1() {//***pNext = OpenState::getInstance();}virtual void Operation2() {//...pNext = CloseState::getInstance();}virtual void Operation3() {//$$$pNext = ConnectState::getInstance();}
};// 扩展
class WaitState : public NetworkState {//...
};class NetworkProcessor {NetworkState* state_;public:NetworkProcessor(NetworkState* state) {this->state_ = state;}void Operation1() {//...state_->Operation1();state_ = state_->pNext;//...}void Operation2() {//...state_->Operation2();state_ = state_->pNext;//...}void Operation3() {//...state_->Operation3();state_ = state_->pNext;//...}};

要点总结

State模式将所有与一个特定状态的相关的行为都放入一个State的子类对象中,在对象状态切换时,切换相应的对象;但同时维持State的接口,这样实现了具体操作与状态转换之间的解耦。

为不同的状态引入不同的对象使得状态转换变得更加明确,而且可怀疑保证不会出现状态不一致的情况,因为转换是原子性的---即要么彻底转换过来,要么不转换。

如果State对象没有实例变量,那么各个上下文可怀疑共享同一个State对象,从而节省对象开销。

http://www.ds6.com.cn/news/57352.html

相关文章:

  • html5响应式网站psd淘宝指数入口
  • 新闻网站排行榜如何优化网站首页
  • 门户网站建设 知乎公司网站费用
  • title 网站建设公司实力品牌营销公司
  • 怎样进入医院公众号百度seo流量
  • 网页设计师联盟网站怎么市场营销方案范文
  • 有关网站建设的公众号免费个人自助建站
  • 互联网 网站设计厦门百度推广排名优化
  • 建设银行网站调用支付源码提高网站搜索排名
  • 商城网站有哪些功能百度关键词优化有效果吗
  • wordpress更换icon开封seo推广
  • 南京模板建站哪家好网络营销的主要传播渠道是
  • 技术支持 沧州辉煌网络-网站建设阿里云免费建站
  • 未来做啥网站能致富网站怎么收录
  • 网站建设教程怎么建黑帽seo优化
  • 网站被挂广告怎么办站长工具seo词语排名
  • 游戏自助充值网站怎么做百度指数可以用来干什么
  • 怎么看一个网站是谁做的做网站公司排名
  • 傻瓜网站制作百度搜索引擎入口官网
  • 网站关键字太多互联网怎么赚钱
  • 响应式网站模板下载淘宝宝贝排名查询
  • 手机免费网站建设哪家公司好上海全国关键词排名优化
  • wordpress卸载多说aso优化平台
  • 做外贸有哪些免费的网站搜索引擎是指什么
  • wordpress google js南京百度提升优化
  • 网站规划与网页设计北京seo网站优化培训
  • 网站制作与管理技术标准实训教程seo分析网站
  • 私服网站如何做seoseo百度快速排名软件
  • 网站建设 艺麟盛世html网页制作用什么软件
  • 做网站用什么云服务器吗seo软件系统