状态模式-c++实现

来源:互联网 发布:辽宁网络广播电视台 编辑:程序博客网 时间:2024/04/30 05:13
// statepattern.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include  <iostream>using namespace std;class Person;class MainState{ public:virtual  void  attack() = 0;virtual  void  stand() = 0;};class Astate : public MainState{public:Astate(Person *pPerson) { m_pPerson = pPerson;};public:void attack(){cout << "Astate attack" << endl;}void stand(){cout << "Astate stand" << endl;}private:Person *m_pPerson;};class Bstate : public MainState{public:Bstate(Person *pPerson) { m_pPerson = pPerson;};void attack(){cout << "Bstate attack" << endl;}void stand(){cout << "Bstate stand" << endl;}private:Person *m_pPerson;};class Person{private:MainState *m_pMainState;Astate    *m_pAstate;Bstate    *m_pBstate;public:Person(){m_pAstate = new Astate(this);m_pBstate = new Bstate(this);m_pMainState = m_pAstate;}void enterAstate(){m_pMainState = m_pAstate;cout << "enter Astate" << endl;}void enterBstate(){m_pMainState = m_pBstate;cout << "enter Bstate" << endl;}public:void attack(){m_pMainState->attack();}void stand(){m_pMainState->stand();}};int main(){Person *p = new Person();p->enterBstate();p->attack();p->stand();p->enterAstate();p->attack();p->stand();p->enterBstate();p->attack();p->stand();    return 0;}

1 0
原创粉丝点击