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

最新免费网站源码资源网站电子商务网站建设规划方案

最新免费网站源码资源网站,电子商务网站建设规划方案,网站建设公司费用,宁波住房和城乡建设网站状态模式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.laogonggong.com/news/28956.html

相关文章:

  • 产品宣传网站开发搜索引擎推广的费用
  • php网站攻击西安官网seo技术
  • thinkphp做的上线网站西安百度关键词推广
  • 做企业服务这个行业怎么样360优化大师下载
  • 网站的建设与推广惠州seo排名公司
  • 网页设计资料的网站关键词搜索排名
  • 广州市哪有做网站的广告传媒公司
  • 成都市住房与城乡建设局官网推广优化方案
  • html5网站 源码成都网站制作关键词推广排名
  • 系统开发和网站开发如何做平台推广
  • 劳动服务公司网站源码福建seo排名培训
  • 哪个网站做国际生意seo查询是什么意思
  • 大型免费网站制作宣传推广的形式有哪些
  • 开发区网站建设公司宁波seo关键词费用
  • 微信小程序商家版zac seo博客
  • 青岛网站建设哪家好免费域名 网站
  • 政府网站集约化建设领导小组夫唯老师seo
  • 苏州做网站多少钱网站打开速度优化
  • 网站建设合作流程图写软文用什么软件
  • wordpress导航栏该怎么设置十堰seo
  • 工业设计招聘信息网站免费外网加速器
  • 山东网站建设公司电话网络营销公司哪家可靠
  • 有哪些网站可以做任务返现网上互联网推广
  • wordpress 自动推送北京seo运营推广
  • 杨浦网站建设怎么恶意点击对手竞价
  • 品网站建设公司百度快速排名优化工具
  • 怎么制作图片链接seo优化文章网站
  • 360免费建站怎么样seo博客大全
  • 网站关键词排名分析推广方式和推广渠道
  • 网站建设实施方案关键词挖掘网站