1. 状态的平行性

与策略模式的不同,策略模式的行为是平等的

2. 上下文和状态处理对象

上下文是持有状态的对象,但是上下文自身并不处理跟状态相关的行为,而是把处理状态的功能委托给了状态对应的状态处理类来处理。

在具体的状态处理类中经常需要获取上下文自身的数据,甚至在必要的时候会回调上下文的方法,因此,通常将上下文自身当作一个参数传递给具体的状态处理类。

客户端一般只和上下文交互。客户端可以用状态对象来配置一个上下文,一旦配置完毕,就不再需要和状态对象打交道了。客户端通常不负责运行期间状态的维护,也不负责决定后续到底使用哪一个具体的状态处理对象。

3. 状态的维护和转换控制

VoteManager类保存数据,让状态自己维护管理。

public class VoteManager {// 记录当前每个用户对应的状态处理对象,每个用户当前的状态是不同的private Map<String,VoteState> mapState = new HashMap<String,VoteState>();//记录用户投票的结果,Map<String,String>对应Map<用户名称,投票的选项>private Map<String,String> mapVote = new HashMap<String,String>();//记录用户投票次数,Map<String,Integer>对应Map<用户名称,投票的次数>private Map<String,Integer> mapVoteCount = new HashMap<String,Integer>();// 获取记录用户投票结果的Map public Map<String, String> getMapVote() {return mapVote;}//获取记录每个用户对应的状态处理对象的Map public Map<String, VoteState> getMapState() {return mapState;}//获取记录每个用户对应的投票次数的Map public Map<String, Integer> getMapVoteCount() {return mapVoteCount;}
}public class RepeatVoteState implements VoteState{public void vote(String user, String voteItem, VoteManager voteManager) {//重复投票//暂时不做处理System.out.println("请不要重复投票");//重复投票完成,维护下一个状态,重复投票到5次,就算恶意投票了//注意这里是判断大于等于4,因为这里设置的是下一个状态//下一个操作次数就是5了,就应该算是恶意投票了if(voteManager.getMapVoteCount().get(user) >= 4){voteManager.getMapState().put(user, new SpiteVoteState());}}
}

4. 状态存储到数据库中

不是存在Context上下文中,存在数据库。

eg.

//直接从数据库获取该用户对应的下一个状态的状态编码
String stateid ="从数据库中获取这个值";
//开始根据状态编码来创建需用的状态对象
//根据状态编码去获取相应的类
string className ="根据状态编码去获取相应的类";/使用反射创建对象实例,简单示意一下
Class c = Class.forName (className) ;state = (VoteState)c.newInstance ();

《研磨设计模式》chap18 状态模式state(2)模式介绍相关推荐

  1. 研磨设计模式学习笔记之装饰器模式

    1.装饰器模式定义:动态地给一个对象添加一些额外的功能职责,就增加功能来说,装饰器模式要比生成子类更加灵活. 2.装饰器模式实现:在装饰器模式的实现中,为了能够实现和原来使用被装饰对象的代码无缝隙结合 ...

  2. [设计模式][c++]状态切换模式

    转自:http://blog.csdn.net/yongh701/article/details/49154439 状态模式也是设计模式的一种,这种设计模式思想不复杂,就是实现起来的代码有点复杂.主要 ...

  3. 设计模式之模板方法模式、策略模式、命令模式、责任链模式、状态模式

    前言 本章节给您介绍23种设计模式的行为型模式中的模板方法模式.策略模式.命令模式.责任链模式.状态模式. 如有帮助记得3连 加 关注哦!欢迎品论去留言交流,谢谢阅读! 文章目录 前言 一.模板方法模 ...

  4. 设计模式的C语言应用-状态机模式-第二章

    模式介绍 状态(state)模式是C语言实现相当常用的模式,也是能够在C语言***现出来的最显性的模式之一.在面向对象里,状态模式允许一个对象在内部状态改变的时候改变其行为. 状态用法很多,最常见的是 ...

  5. 《java与模式》中模式总结

    转自:http://hi.baidu.com/hannick/blog/item/e820d8947d51a541d1135e54.html 设计模式一览表 注:加*的为GoF的23种设计模式. 一. ...

  6. 设计模式之状态模式(State)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  7. 设计模式(十二):通过ATM取款机来认识“状态模式”(State Pattern)

    说到状态模式,如果你看过之前发布的重构系列的文章中的<代码重构(六):代码重构完整案例>这篇博客的话,那么你应该对"状态模式"并不陌生,因为我们之前使用到了状态模式进行 ...

  8. 设计模式:状态模式(State)

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

  9. 【转】设计模式 ( 十七) 状态模式State(对象行为型)

    设计模式 ( 十七) 状态模式State(对象行为型) 1.概述 在软件开发过程中,应用程序可能会根据不同的情况作出不同的处理.最直接的解决方案是将这些所有可能发生的情况全都考虑到.然后使用if... ...

  10. C++设计模式之状态模式(state)(行为型)

    一 定义 状态模式:允许一个对象在其内部状态改变时改变它的行为.对象看起来似乎修改了它的类. 状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂的情况.把不同状态的操作分散到不同的状态对象 ...

最新文章

  1. 【PAT (Basic Level) 】1030 完美数列 (25 分)
  2. 一个div 上下两行_纯CSS实现单一div的正多边形变换
  3. Android知识点
  4. Vue学习(组件的定义及调用、路由)-学习笔记
  5. 四则运算 结对编程
  6. 蓝桥杯-填空题-门牌制作
  7. 英特尓祭出开挖数据价值的“六脉神剑”!
  8. SQLite.Net操作类
  9. 全网最新猎豹网校-快速掌握Python项目实战
  10. Creo6.0无人机建模与结构设计视频教程
  11. 基于ATMEGA128单片机的播种机控制系统
  12. Ubuntu带给我们的商机
  13. Java实现搭积木_Java搭积木游戏
  14. 基于JavaWeb实现的问卷调查系统
  15. 【ABAP】销售订单修改税率
  16. Muti-scale related papers
  17. 2022-2028全球与中国紫外线点固化系统市场现状及未来发展趋势
  18. 对抗网络之PG-GAN,无条件下生成更真实的人脸图像
  19. vs2013配置OpenGL+简单案例分析
  20. 逻辑函数常用的描述方法及相互间的转化

热门文章

  1. 【Python】青少年蓝桥杯_每日一题_2.27_杨辉三角
  2. Java 洛谷 P1008 三连击
  3. 本地html自动跳转,HTML页面跳转的5种方法
  4. java强制编译通过_强制java使用用户输入作为消息进行编译错误
  5. oracle字段求和_oracle大纲
  6. java 700c corsa_JAVA CORSA休闲车,缔造“城市 生活 元素”
  7. xp系统如何开启索引服务器,Windows XP系统关闭磁盘索引的两个方法图文教程
  8. 哈工大计算机系女生的宿舍,哈工大的硕博士们,这次被学校折腾惨了!
  9. linux七个运行级如何设置,RHEL7 运行级别简介及切换操作
  10. Py之pycocotools:pycocotools库的简介、安装、使用方法之详细攻略