您的位置:首页 > 编程语言 > C语言/C++

状态模式-c++实现

2016-05-03 23:30 609 查看
// 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: