首页 > 代码库 > 状态模式
状态模式
状态模式,当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。
状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。
适用场景:
- 一个对象的行为取决于他的状态,并且它必须在运行时刻根据状态改变他的行为。
- 一个操作中含有庞大的多分支结构,并且这些分支决定于对象的状态。
代码实例结构图:
代码:
//Status.h
#include "stdafx.h" #include <iostream> using namespace std; class Work; class State { public: virtual ~State(){} virtual void WritePrograme(Work* work) = 0; }; class Work { private: State* Current; double Hour; bool finish = false; public: ~Work() { if (Current != NULL) delete Current; } double GetHour(){ return Hour; } void SetHour(double hour){ Hour = hour; } bool TaskFinished(){ return finish; } void SetFinish(bool f){ finish = f; } void SetState(State* s){ Current = s; } void WritePrograme() { Current->WritePrograme(this); } }; class SleepingState :public State { public: virtual void WritePrograme(Work* work) { cout << "睡觉时间" << endl; } }; class AfternoonState :public State { public: virtual void WritePrograme(Work* work) { if (work->GetHour() < 18) { cout << "下午时间" << endl; } else { work->SetState(new SleepingState()); work->WritePrograme(); } } }; class ForenoonState :public State { public: virtual void WritePrograme(Work* work) { if (work->GetHour() < 12) { cout << "上午时间" << endl; } else { work->SetState(new AfternoonState()); work->WritePrograme(); } } };// StatusPattern.cpp
// StatusPattern.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include "Status.h" int _tmain(int argc, _TCHAR* argv[]) { Work* work = new Work(); work->SetState(new ForenoonState()); work->SetHour(10); work->WritePrograme(); work->SetHour(20); work->WritePrograme(); getchar(); return 0; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。