老生常谈:状态模式
背景
做为一名使用高级语言的程序员,面向对象的设计一直都是体现程序员能力的重要标准之一,所以在我工作两年后也就是2008年我也开始了对于面向对象设计的学习,主要是拿GOF设计模式来练手,尽管实际项目中没有真正的使用过。常见的23种设计模式,我从2008一至到2009年将近一年的时间我基本上将这些模式都写了一篇Demo,但可能是当时的认识问题有少部分的模式我并没有写下笔记,比如这篇重点分享的状态模式。
案例
由于我工作的项目大多以后台业务为主,所以简单的审核流程非常常见。一说到审核流程,我们可以说市面上有好多工作流的产品可以选择,这当然是好的,但有些项目刚开始规模比较小,需求也比较简单,从技术成本以及效率上来讲一般都不会考虑在项目刚开始的时候就引用工作流引擎,基本上都是通过常规的数据状态扭转即可达到目的,说的直白点就是根据不同的数据状态来做不同的操作。拿我最近的一个产品申请功能来讲,它具备一个典型的状态扭转流程:
- 保存
- 提交
- 审核
- 拒绝
- 预发布
- 上架
- 下架
- 删除
操作人员在实现产品申请的状态变更时,一般写程序步骤是这样的:
- 获取申请的当前状态
- 判定当前的申请状态是否允许做审核操作,一般会出现类似如下的代码:
private void checkStatusForEdit(ProductRequest request) throws ProductServiceException { if(request.getAuditStatus()==AuditStatus.Approved &&(request.getPublishStatus()==PublishStatus
