博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式详细系列教程 (三)以网上购物通用的订单流程 详解状态模式
阅读量:6001 次
发布时间:2019-06-20

本文共 980 字,大约阅读时间需要 3 分钟。

        这是用用EA画的状态图,从图上可以看出,它详细的表明了购物订单形成以及发送流程,在订单形成的过程中,会经过各种状态来处理,什么时候进入哪一个状态需要复杂的逻辑来判断,为了使逻辑简单化,我们可以应用状态模式,把复杂的逻辑判断分布到各个子类中去,首先,看一下状态图:

          这个图描述了订单各种状态如:增加订单、注册、批准、发送、打印发票、取消等一系列过程。

          我们应用设计模式将它转换为状态模式图:如下

          我们抽象除了一个OrderState类,封装与所有状态相关的行为,不同的子类有不同的行为实现。

          可以这样理解,状态模式=聚合+继承。

          各种状态正好可以聚合在一起,但对于每个状态又不是非有不可,一定包括在内,图中的SalseOrder类控制着个状态类的实例对象,因为它具有的功能即设置、读取各个实例对象。而判断具体哪个状体进行实例化的逻辑判断已经分布到了各个实例内部,所以,状态模式使得代码灵活、并且易于扩展了。

          也可以这样理解,状态模式就是一个特殊的类。它有很多属性,具体要用到哪一个属性它自己并不决定,而是由属性自己决定,在我们的生活中这样的事情举不胜数,例如:作为一个好的领导,必须懂得把权力给别人,不要每件事都亲自决定、亲自判断,如果那样就得累死自己,懂得放权才是一个好的领导。这不就是把权力下放的使用,它自己只负责显示结果,减轻自己的负担,学会领导别人。

          学习是来源于生活,又高于生活的一种行为,学习切不可脱离生活,以生活为基础,去理解、认识我们学习的东西,它会加深你的认识、理解,你一定会找到某些共性,并发现一些有价值的东西,反过来,指导生活,使自己一点一点提高。

          下面是经典的状态模式:

          看完这张图,你是否想到了类似的模式,那就是策略模式,其实,状态模式与策略模式它们的图是完全一样的,即原理一样。但它们的差别在于侧重点不一样,解决的问题不一样,策略模式在于解决算法,如商场促销手段有很多种打一折、打两折 、满100送100等,一些具有弹性的问题。而状态模式在于分解复杂逻辑,使复杂的逻辑分布到各个子类中,是程序代码简化。

         记住每个设计模式的图并不重要,关键在于理解和应用,设计模式是一个长期的学习!!

转载于:https://www.cnblogs.com/lilongsheng1125/archive/2012/08/08/4978636.html

你可能感兴趣的文章
Sqlserver 数据库安全
查看>>
netstat命令简单使用
查看>>
Python标示符命名规则
查看>>
SSL certificate problem unable to get local issuer certificate解决办法
查看>>
20145209 刘一阳 《网络对抗》实验四:恶意代码分析
查看>>
个人学期总结
查看>>
CodeForces 985E Pencils and Boxes
查看>>
为什么Elasticsearch查询变得这么慢了?
查看>>
node.js中使用http模块创建服务器和客户端
查看>>
Away3D基础教程(六):支持双面交互的PlaneGeometry
查看>>
(十五)Centos之安装jdk
查看>>
RISC-V: custom instruction and its simulation(转)
查看>>
HDU 5366 The mook jong
查看>>
Unity ScriptableObject自定义属性显示
查看>>
【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】
查看>>
ORACLE内存管理之ASMM AMM
查看>>
移动前端常用meta标签
查看>>
非结构化数据与结构化数据提取---多线程爬虫案例
查看>>
splay版
查看>>
unity 打包编译记录
查看>>