상태 모드 단순 코드 구현

2755 단어 디자인 모드
대상 의 내 적 상태 가 바 뀌 었 을 때 행동 을 바 꿀 수 있 도록 허용 하 는데, 이 대상 은 그 종 류 를 바 꾼 것 처럼 보인다.
상태 모드 는 대상 의 상태 전환 을 제어 하 는 조건 식 이 너무 복잡 할 때의 상황 을 해결 합 니 다.상태의 판단 논 리 를 서로 다른 상 태 를 나타 내 는 일련의 유형 으로 옮 기 면 복잡 한 판단 논 리 를 간소화 할 수 있다.

#include "iostream"
using namespace std;

/**
*       ,          
*/
class TvState
{
public:
	virtual void nextChannel() = 0;
	virtual void prevChannel() = 0;
	virtual void tumUp() = 0;
	virtual void tumDown() = 0;
};

/************************************************************************/
/*                                                   */
/************************************************************************/
class PowerOnState : public TvState
{
public:
	void nextChannel()
	{
		cout << "    " << endl;
	}
	void prevChannel()
	{
		cout << "    " << endl;
	}
	void tumUp()
	{
		cout << "    " << endl;
	}
	void tumDown()
	{
		cout << "    " << endl;
	}
};

/************************************************************************/
/*                                                      */
/************************************************************************/
class PowerOffState : public TvState
{
public:
	void nextChannel(){}
	void prevChannel(){}
	void tumUp(){}
	void tumDown(){}
};

/************************************************************************/
/*                                                                */
/************************************************************************/
class PowerController
{
public:
	void powerOn();
	void powerOff();
};

/************************************************************************/
/*                                                                 */
/************************************************************************/
class TvController : public PowerController
{
public:
	void SetTvState(TvState *mTvState)
	{
		this->m_TvState = mTvState;
	}

	 void powerOn()
	{
		 SetTvState(new PowerOnState());
		 cout << "   " << endl;
	}
	 void powerOff()
	 {
		 SetTvState(new PowerOffState());
		 cout << "   " << endl;
	 }
	 void nextChannel()
	 {
		 m_TvState->nextChannel();
	 }
	 void prevChannel()
	 {
		 m_TvState->prevChannel();
	 }
	 void tumUp()
	 {
		 m_TvState->tumUp();
	 }
	 void tumDown()
	 {
		 m_TvState->tumDown();
	 }

public:
	TvState *m_TvState;

};


 void main()
{
	TvController *tvController = new TvController();
 	tvController->powerOn();
 	tvController->nextChannel();
 	tvController->tumUp();
 	tvController->powerOff();
 	tvController->tumDown();
	system("pause");
}

특징 상태 와 관련 된 행 위 를 국부 화하 고 서로 다른 상태의 행 위 를 분리 합 니 다!

좋은 웹페이지 즐겨찾기