首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

状态方式

2012-08-22 
状态模式引入:http://www.iteye.com/topic/267870先简单介绍一下状态模式:将与状态有关处理逻辑分散到代表

状态模式
引入:http://www.iteye.com/topic/267870
先简单介绍一下状态模式:将与状态有关处理逻辑分散到代表对象状态各个类中!
状态之间的改变都对应一个动作,一个动作可能对应多个状态的改变(动作来描述。可能不是特别准确),如提交,审核....

state模式的两个原则:
1.有几个动作就有几个方法,一个动作可能对应多个状态转换,这些方法都定义在同一个接口里。
2.有几个状态就有几个实现上述接口的类。

用户升级vip例子:首先用户必须是注册用户,普通用户升级vip需要提交真实的个人信息,工作人员根据提交信息的真实性进行审核。审核通过成为vip用户,审核未通过,可以再次申请。升级到vip以后,如果查到有违反纪律的。降级到普通用户。需要重新提交vip申请。

public class UserStateFactory {      static List list = null;      static {          list = new ArrayList();          list.add(new NotSubmitUser());          list.add(new VipUser());          list.add(new WaitForVerifyUser());        }        public static UserState getUserState(int status) {          for (UserState state : list) {              if (state.getStatus() == status)                  return state;          }          return null;      }  }  

状态模式操作是固定的,但是接受者类不相同。多态性的原则实际执行哪个方法不仅取决与方法签名,还取决与操作的接受者类。

该例子只是state模式的一个场景的应用,比较具体。
状态模式的优点:1.非常好的扩展性---假设增加一个用户组:当vip用户的信用达到一定程度后,升级到永久的vip。这时只需另外添加一个状态类,对原来的代码并不需要做改动。
2.代码结构清晰,不同出错。即程序健壮--除UserStateFactory的getUserState(int status)外,其他方法的逻辑非常的简单,都不包含局部变量。如果程序不需要持久化到数据库,也不需要getUserState(int status),该方法是状态模式内容之外的

用状态模式类的数量会大大的增加。

说明:该例子只是状态模式的一个应用,并不是状态模式,是属于比较具体。

热点排行