状态设计模式(行为型设计模式)

阅读: 评论:0

状态设计模式(行为型设计模式)

状态设计模式(行为型设计模式)

一、状态设计模式简介

状态设计模式(State Pattern)

  • 对象的⾏为依赖于它的状态(属性),并且可以根据它的状态改变⽽改变它的相关⾏为 ,属于⾏为型模式
  • 允许⼀个对象在其内部状态改变时改变它的⾏为
  • 状态模式是策略模式的孪⽣兄弟,它们的UML图是⼀样的,但实际上解决的是不同情况的两种场景问题
  • ⼯作中⽤的不多,基本策略模式⽐较多

应用场景

  • ⼀个对象的⾏为取决于它的状态, 并且它必须在运⾏时刻根据状态改变它的⾏为
  • 代码中包含⼤量与对象状态有关的条件语句 ,⽐如⼀个 操作中含有庞⼤的多分⽀的条件if else语句,且这些分⽀依赖于该对象的状态
  • 电商订单状态:未⽀付、已⽀付、派送中,收货完成等 状态,各个状态下处理不同的事情

角色 

  • Context 上下⽂: 定义了客户程序需要的接⼝并维护⼀ 个具体状态⻆⾊的实例,将与状态相关的操作委托给当 前的Concrete State对象来处理 
  • State 抽象状态类: 定义⼀个接⼝以封装与Context的⼀ 个特定状态相关的⾏为。
  • ConcreteState具体状态类: 实现抽象状态定义的接⼝。 

二、优缺点 

优点:

  • 只需要改变对象状态即可改变对象的⾏为
  • 可以让多个环境对象共享⼀个状态对象,从⽽减少系统 中对象的个数

缺点:

  • 状态模式的使⽤会增加系统类和对象的个数。
  • 状态模式的结构与实现都较为复杂,如果使⽤不当将导致程序结构和代码的混乱
  • 状态模式对“开闭原则”的⽀持并不太好,对于可以切换状态的状态模式,增加新的状态类需要修改那些负责状 态转换的源代码 

状态设计和策略模式的区别

  • 结构基本类似、状态模式重点在各状态之间的切换,从⽽做不同的事情
  • 策略模式更侧重于根据具体情况选择策略,并不涉及切换
  • 状态模式不同状态下做的事情不同,⽽策略模式做的都是同⼀件事。
  • 例如,聚合⽀付平台,有⽀付宝、微信⽀付、银联⽀付,虽然策略不同,但最终做的事情都是⽀付
  • 状态模式,各个状态的同⼀⽅法做的是不同的事,不能互相替换

三、代码实现

/***抽象状态*/
public interface State {void handle();
}
/*** 具体状态--订单新创建**/public class NewOrderState implements State{@Overridepublic void handle() {System.out.println("新订单,未支付");System.out.println("调用商户客服服务,有新订单n");}
}/*** 具体状态--订单已支付**/public class PayOrderState implements State{@Overridepublic void handle() {System.out.println("新订单已经支付");System.out.println("调用商户客服服务,订单已经支付");System.out.println("调用物流服务,未发货n");}
}/*** 具体状态--订单已经发货**/public class SendOrderState implements State{@Overridepublic void handle() {System.out.println("订单已经发货");System.out.println("调用短信服务,告诉用户已经发货");System.out.println("更新物流信息n");}
}
/***上下文**/public class OrderContext {private State state;public OrderContext(){}public void setState(State state) {this.state = state;System.out.println("订单状态变更!!");this.state.handle();}
}
/**
* 状态设计模式
*/
public class Main {public static void main(String[] args) {//上下文OrderContext orderContext = new OrderContext();orderContext.setState(new NewOrderState());orderContext.setState(new PayOrderState());orderContext.setState(new SendOrderState());}
}

注释:个人学习观点以作笔记,如有瑕疵望谅解

本文发布于:2024-01-31 15:47:45,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170668726329628.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:模式   状态
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23