java设计模式之状态模式(State)

概念

状态模式,又称为对象模式,状态模式是对象的行为模式。
状态模式允许一个对象在其内部改变的时候改变其行为,使得这个对象看上去就像是改变了它的类一样。

 

特性

1,状态模式需要对每一个可能存在的状态都创建一个子类,并继承状态类。当状态变化时,便改变所选的子类。

2,所有与状态有关的行为都封装到一个特定对象里面,使行为的定义局域化。

3,如果有新的状态以及它对应的行为需要定义时,通过新建子类的方式添加,不需要改变其他类。

4,使程序更易于维护,状态模式大量的状态子类,使程序免于大量的条件转移语句。

5,状态子类均是从一个抽象状态类或接口继承而来,java语言的特性使得在java语言中使用状态模式较为安全,多态性原则是状态模式的核心。

 

代码演示

        一个电商平台的订单,从下单到完结会存在十几种状态,中间涉及到用户和平台操作而引起的状态变化,判断逻辑复杂。
我们这里使用简易版本的订单下单过程来演示状态模式。

首先,我们来梳理下这个简易版本的订单状态和哪些行为引起状态变化

订单状态:待付款/待发货/待收货/已完成/已取消/已退款
每个状态对应的行为
待付款:取消操作,支付操作
待发货:发货操作,退款操作
待收货:收货操作
已完成:不能操作
已取消:不能操作
已退款:不能操作

1,创建抽象的状态类,定义代表状态变化行为抽象方法

 

2,创建环境角色类,继承状态类,定义状态枚举

 

3,创建具体的状态类,继承状态类,并实现方法

待付款

待发货

 

待收货

 

已完成

 

已取消

 

已退款

 

4,创建main方法测试调用

 

执行结果:

新建订单成功
取消成功
订单已取消,不能操作收货

新建订单成功
支付成功
订单为待发货,不能操作取消
退款成功,订单完结

新建订单成功
支付成功
发货成功
订单为待收货,不能操作退款
收货成功,订单完结

 

 

参考书籍:

《java与模式》
《设计模式之禅》
《Java设计模式(第2版)中文版》


guolin

guolin

相信世界,向往美好,记录成长过程,分享个人心得,充实平凡生活。 网站信条:因为喜欢,所以热爱。

发表评论

电子邮件地址不会被公开。 必填项已用*标注