zoukankan      html  css  js  c++  java
  • 设计模式复习-状态模式

    
    
    #pragma once
    #include "stdafx.h"
    
    #include <queue>
    #include<iostream>
    using namespace std;
    
    //设计模式-状态模式State
    /*
    当一个对象的内在状态改变时,允许改变其行为,这个对象看起来就是改变了类。
    */
    
    class CContexct;
    
    class CState {//抽象状态类,定义一个接口以封装与Context的一个特定状态相关的行为。
    public:
    	virtual void Handle(CContexct *pContext) = 0;
    };
    
    class CContexct {//维护一个concretestate子类的实例,这个实例定义当前的状态。
    private:
    	CState *m_pState;
    	queue<CState *>m_qHashMemory;
    public:
    	CContexct(CState *pState) {
    		while (!m_qHashMemory.empty()) {
    			m_qHashMemory.pop();
    		}
    		m_pState = pState;
    		m_qHashMemory.push(m_pState);
    	}
    	~CContexct() {
    		while (!m_qHashMemory.empty()) {
    			delete m_qHashMemory.front();
    			m_qHashMemory.pop();
    		}
    	}
    	void SetContext(CState *pState) {
    		m_pState = pState;
    		m_qHashMemory.push(m_pState);
    	}
    	void Request() {
    		m_pState->Handle(this);
    	}
    };
    
    class CConcreteStateC :public CState {//具体状态,每一个子类实现一个与Context的一个状态相关的行为。
    public:
    	void Handle(CContexct *pContext) {
    		cout << "over" << endl;
    		return;
    	}
    };
    
    class CConcreteStateB : public CState {
    public:
    	void Handle(CContexct *pContext) {
    		pContext->SetContext(new CConcreteStateC());
    		pContext->Request();
    	}
    };
    
    class CConcreteStateA : public CState {
    public:
    	void Handle(CContexct *pContext) {
    		pContext->SetContext(new CConcreteStateB());
    		pContext->Request();
    	}
    };
    
    
    int main() {
    
    	CContexct *pContexct = new CContexct(new CConcreteStateA());
    	pContexct->Request();
    	delete pContexct;
    
    	getchar();
    	return 0;
    }

  • 相关阅读:
    maven创建的quickstart项目生成可执行jar
    spring boot 修改banner
    spring boot项目打包成war
    node集成mysql——pool连接池
    adb命令模拟按键输入keycode
    Spring 全局异常处理
    程序开发中版本管理之命名规则及格式
    群晖Nas中搭建Intellij Idea的LicenseServer服务
    uml-类图书写指南
    Spring Boot + Docker + K8S 简单示例
  • 原文地址:https://www.cnblogs.com/csnd/p/12061915.html
Copyright © 2011-2022 走看看