• 设计模式复习-状态模式


    
    
    #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;
    }

  • 相关阅读:
    java匿名对象
    Java面向对象详解
    Java语言基本语法
    Win7下JDK环境变量的设置
    LeetCode-Shortest Word Distance
    LeetCode-Count Complete Tree Nodes
    LeetCode-Palindrome Pairs
    LeetCode- Implement Trie (Prefix Tree)
    LeetCode-Lowest Common Ancestor of a Binary Tre
    LeetCode- Binary Tree Longest Consecutive Sequence
  • 原文地址:https://www.cnblogs.com/csnd/p/12061915.html
Copyright © 2020-2023  润新知