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

龙岗在线网站制作wordpress评论框提示

龙岗在线网站制作,wordpress评论框提示,如何自己注册域名,开发手机网站用什么语言状态模式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.yayakq.cn/news/797349/

相关文章:

  • 网站快速备案多少钱认证慈溪网站制作哪家最便宜
  • 新网站怎么让百度收录自学做网站一般要多久
  • 织梦网站后台文章编辑美化代码天府新区网站建设
  • 网站分屏布局设计企业建一个网站需要多少钱
  • 百姓网站制作萧山网页设计
  • 一级a做爰片免费网站 视频无锡网站建设制作开发
  • 企业网站系统模板网站制作成品免费
  • 网站建设目录规范wordpress插件授权
  • 装饰公司 网站模板建设部网站一级开发资质
  • 廊坊网站建设服务网上做兼职正规网站有哪些
  • 网站运营 宣传团队建设云南专业网站建站建设
  • 东莞企业建站公司wordpress app怎么登录注册
  • 做手机网站用什么软件wordpress用户积分中心
  • 无锡网站制作公司排名宁波seo推广定制平台
  • 在阿里云上做网站步骤seo推广引擎优化
  • 天津学网站建设站长之家seo工具包
  • 使用rem布局的网站北京互联网公司前10强有哪些
  • 站长之家html模板网站开发相关技术发展
  • 安丘网站建设开发网站制作软件价格
  • 国外网站流量查询中方元建设工程 网站
  • ipv6在家做网站吴桥做网站价格
  • 网站底部分享怎么做梧州吧
  • 南京网站建设的公司如何申请微信公众号平台
  • 扁平化网站设计趋势买商标最好的平台
  • 有关优化网站建设的书籍招聘页面模板
  • 宁波北仑做公司网站兰州官网优化服务
  • 网站挂标 怎么做做时间轴的在线网站
  • 网站开发工程师是什么品牌如何打造
  • 深圳买门的网站建设常州网站建设效果
  • 司局网站维护廉政风险建设佛山网站建设专家评价