// 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;
}
状态模式-c++实现
最新推荐文章于 2024-06-12 10:36:53 发布