首页 / 设计模式 / c++设计模式概述之状态
c++设计模式概述之状态
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c++设计模式概述之状态,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2094字,纯文字阅读大概需要3分钟。
内容图文
![c++设计模式概述之状态](/upload/InfoBanner/zyjiaocheng/627/ac447ecc2d2b4d25b5ff681d3a1aab6b.jpg)
代码写的不够规范,目的是为了缩短篇幅,实际中请不要这样做
参看:https://www.runoob.com/design-pattern/state-pattern.html
1、概述
这个有点抽象,我的理解是: 行为受到状态的变化而变化。举一个例子,篮球员动员,如果运动员这会儿状态好,命中率(投球)就会上升。再比如人的情绪变化,可能会导致不同的行为。比如高兴,是动作A,犹豫,动作B。
需要用的角色,主要分为2类,A、状态(state),B、上下文(context)。
2、抽象状态
// 抽象状态 class oct_state { public: virtual void do_action(oct_context *pct) = 0; // 用于将上下文的状态输出 virtual std::string to_str() = 0; protected: std::string _str_state; };
3、状态有多种,下面举例用到了2个A和B:
// 状态A class oct_state_A : public oct_state { // 实现接口 void do_action(oct_context *pct) { // 1、输出当前发状态 std::cout << "\n状态变化了,现在正处于状态A\n"; // 2、告诉上下文,已经进入了状态A if (pct) pct->set_state(this); _str_state = std::string("状态A"); } std::string to_str() { return _str_state; } }; // 状态B class oct_state_B : public oct_state { void do_action(oct_context *pct) { // 1、输出当前发状态 std::cout << "\n状态变化了,现在正处于状态B\n"; // 2、告知上下文,进入了状态B if (pct) pct->set_state(this); _str_state = std::string("状态B"); } std::string to_str() { return _str_state; } };
4、上下文(context)
class oct_context { public: void set_state(oct_state *ps) { if (ps) _pstate = ps; } oct_state * get_state() { return _pstate; } private: oct_state *_pstate = nullptr; };
5、调用
void call_state() { // 1、创建上下文和状态AB std::unique_ptr<oct_context> pcontext(new oct_context); std::unique_ptr<oct_state> pstateA(new oct_state_A); std::unique_ptr<oct_state> pstateB(new oct_state_B); if (!pcontext || !pstateA || !pstateB) { std::cout << "\n创建状态AB或者创建上下文对象失败\n"; return; } // 1、进入状态A std::cout << "\n1、进入状态A\n"; pstateB->do_action(pcontext.get()); std::cout << "\n上下文输出:" << pcontext->get_state()->to_str().c_str() << endl;; // 2、进入状态B std::cout << "\n\n\n\n-----------------------------------\n2、进入状态B\n"; pstateB->do_action(pcontext.get()); std::cout << "\n上下文输出:" << pcontext->get_state()->to_str().c_str() << endl;; }
6、结果:
内容总结
以上是互联网集市为您收集整理的c++设计模式概述之状态全部内容,希望文章能够帮你解决c++设计模式概述之状态所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。