当前位置: 首页 > news >正文

网站采集来源北京网站建设网站开发

网站采集来源,北京网站建设网站开发,做苗木免费网站,宁波大型网站设计公司概述 状态模式是一种行为设计模式,它可以让对象在内部状态改变时改变它的行为。简而言之,状态模式允许对象在不同状态下更改其行为,而不需要通过使用大量的条件语句进行手动更改。 优点: 状态模式将与特定状态相关的行为分散到…

概述

状态模式是一种行为设计模式,它可以让对象在内部状态改变时改变它的行为。简而言之,状态模式允许对象在不同状态下更改其行为,而不需要通过使用大量的条件语句进行手动更改。

优点:
  • 状态模式将与特定状态相关的行为分散到不同的状态类中,使得代码更加模块化并且易于理解和维护。
  • 状态模式符合开放封闭原则(Open-Closed Principle),当需要新增一种状态时,可以通过添加一个新的状态类来扩展系统,而不需要修改已有的代码。
  • 状态模式将状态转换逻辑封装在状态类中,使得可以在不同的状态类中实现不同的状态转换规则,从而实现更灵活的状态转换逻辑。
缺点:
  • 状态类的数量可能会随着状态的增加而增加,导致系统中类的数量增加,增加了代码的复杂性和理解难度。
  • 状态模式要求对象具有较为复杂的内部状态转换逻辑,如果只有少量的状态转换,使用状态模式可能会显得过于繁琐。
使用场景:
  • 当一个对象的行为与其状态相关,并且在不同状态下行为发生变化时,可以考虑使用状态模式。例如,订单在不同状态下有不同的行为,可以使用状态模式来封装每个状态的行为。
  • 当需要提供对象的历史记录和撤销功能时,状态模式可以很好地实现。例如,文本编辑器中的编辑历史记录、Web浏览器中的前进和后退功能等。

示例

假设我们正在开发一个电子商务平台,需要实现订单状态的管理。订单的状态可以有多种,例如待支付、已支付、已发货、已完成等。不同的状态下,订单的行为也不同。

首先,我们定义订单状态接口OrderState,并在接口中定义订单的行为:

public interface OrderState {void pay(Order order);void deliver(Order order);void complete(Order order);
}

然后,我们实现具体的订单状态类,例如待支付状态PendingPaymentState、已支付状态PaidState、已发货状态ShippedState和已完成状态CompletedState

public class PendingPaymentState implements OrderState {@Overridepublic void pay(Order order) {System.out.println("订单已支付");order.setState(new PaidState());}@Overridepublic void deliver(Order order) {System.out.println("订单未支付,不能发货");}@Overridepublic void complete(Order order) {System.out.println("订单未支付,不能完成");}
}public class PaidState implements OrderState {@Overridepublic void pay(Order order) {System.out.println("订单已支付");}@Overridepublic void deliver(Order order) {System.out.println("订单已发货");order.setState(new ShippedState());}@Overridepublic void complete(Order order) {System.out.println("订单未发货,不能完成");}
}public class ShippedState implements OrderState {@Overridepublic void pay(Order order) {System.out.println("订单已支付");}@Overridepublic void deliver(Order order) {System.out.println("订单已发货");}@Overridepublic void complete(Order order) {System.out.println("订单已完成");order.setState(new CompletedState());}
}public class CompletedState implements OrderState {@Overridepublic void pay(Order order) {System.out.println("订单已支付,不能重新支付");}@Overridepublic void deliver(Order order) {System.out.println("订单已完成,不能发货");}@Overridepublic void complete(Order order) {System.out.println("订单已完成");}
}

接下来,我们定义订单类Order,并在类中保存订单的状态和执行订单相关的行为:

public class Order {private OrderState state;public Order() {this.state = new PendingPaymentState();}public void setState(OrderState state) {this.state = state;}public void pay() {state.pay(this);}public void deliver() {state.deliver(this);}public void complete() {state.complete(this);}
}

现在,我们可以创建订单对象,并根据不同的状态执行订单的行为:

public class StateExample {public static void main(String[] args) {// 创建订单对象Order order = new Order();// 执行订单的行为order.pay();order.deliver();order.complete();}
}

运行结果

订单已支付
订单未支付,不能发货
订单未支付,不能完成

http://www.yayakq.cn/news/804817/

相关文章:

  • 深圳网站建设服务平台西安seo天勤网络营销
  • 投简历找工作哪个网站好上海整站优化公司
  • 网站结构说明株洲网络营销推广
  • Linux网站开发设计网站建设跟网站开发有什么区别吗
  • 企业网站推广建议新站网站建设
  • 烟台网站建设优惠臻动传媒网站默认后台
  • 一个高校的校园网站建设费用网站到期查询
  • 门户网站网页设计网站建设的基本流程规范
  • 把网站做静态化十大网站黄页
  • 拍卖网站开发wordpress 左右风格主题
  • 宁波公司网站建设价格wordpress 查看版本号
  • 自己做网站申请域名互联网保险有哪些
  • 临沂市建设局的网站目前好的推广平台
  • 徐州网站建设制作工作室wordpress 字
  • 熊掌号 西安网站建设重庆展厅设计制作
  • 全球最大购物网站模版 网站需要多少钱
  • 河南省招生网站服务平台工作手机
  • 江西中赣建设有限公司网站服装设计师参考的网站
  • 网页设计网站怎么做下店拓客团队
  • 网站建立之间不安全如何解决营销网站优化seo
  • 软路由做网站电影网站可以备案吗
  • 网站设计公司山东烟台长尾关键词
  • 怎么建网站?站群是什么意思
  • 做公司网站客户群体怎么找建设的网站首页
  • 新乡市建设局网站网站页面效果图怎么做的
  • 取商标名字神器百度快速排名优化服务
  • 大学网站建设考核办法商标设计logo
  • 网络营销工作之企业官方网站建设篇网站建设捌金手指下拉十七
  • 华为公司网站建设方案logo设计的最好的公司
  • 中小企业网站建设 论文汽车公司网站建设