静安微信手机网站制作手机上怎么做能打开的网站吗
静安微信手机网站制作,手机上怎么做能打开的网站吗,苏州现在能去吗,国外网站设计网站文章目录 **一、技术背景与应用场景****为何使用状态模式#xff1f;****典型应用场景包括但不限于#xff1a;** **二、状态模式定义与结构****三、使用步骤举例****四、优缺点分析****总结** 一、技术背景与应用场景
状态模式是一种行为设计模式#xff0c;用于处理一个对… 文章目录 **一、技术背景与应用场景****为何使用状态模式****典型应用场景包括但不限于** **二、状态模式定义与结构****三、使用步骤举例****四、优缺点分析****总结** 一、技术背景与应用场景
状态模式是一种行为设计模式用于处理一个对象在其内部状态改变时其行为也随之发生相应变化的情况。例如在ATM机中用户操作取款、存款、查询等会引发系统状态的变化和对应的操作游戏角色根据所处状态行走、奔跑、战斗执行不同的动作。
为何使用状态模式
减少条件分支通过将状态与相关行为封装为独立类可显著降低业务逻辑中的嵌套或分支条件判断提高代码可读性和维护性。易于扩展新状态当需要新增状态或修改状态行为时只需创建新的状态类或调整现有状态类即可不影响原有系统的整体结构。职责明确遵循单一职责原则状态管理与状态相关的操作分离使得各部分职责更加清晰。
典型应用场景包括但不限于
游戏开发游戏角色的不同状态及其关联行为。设备控制家电设备的各种工作模式切换及其响应操作。订单系统订单流程中的不同状态待支付、已支付、已发货、已完成等及相应的操作处理。 二、状态模式定义与结构
状态模式包含四个核心组成部分 环境角色Context持有当前状态并将与状态相关的请求委托给当前状态对象来处理。抽象状态角色State定义所有具体状态类需要实现的接口通常包含一个或多个方法用于处理来自环境角色的方法调用。具体状态角色Concrete State实现了抽象状态角色声明的接口每个具体状态对应一种特定的行为。状态转移在某个具体状态对象执行对应处理行为时它可能会改变环境角色的状态引用指向另一个具体状态对象。 三、使用步骤举例
模拟了一个简单的电商订单系统这个系统通过状态模式来处理订单从创建到完成或取消的整个生命周期中的不同状态和操作。 抽象状态角色OrderState定义了所有具体状态类需要实现的方法接口包括place()、pay()、ship()和cancel()等。 // 抽象状态角色
public abstract class OrderState {protected Order order;public void setOrder(Order order) {this.order order;}// 抽象方法由具体状态类实现public abstract void place(); //下单public abstract void pay(); //支付public abstract void ship(); //发货public abstract void cancel(); //取消订单
}具体状态角色 CreatedState代表订单刚创建的状态在此状态下可以进行下单和取消操作当调用place()时只是打印提示信息而调用cancel()会将订单状态转换为CancelledState。 // 具体状态角色
public class CreatedState extends OrderState {Overridepublic void place() {System.out.println(订单已创建等待支付);}Overridepublic void pay() {System.out.println(订单已支付~);// 转换状态至“已支付”状态order.setState(new PaidState());}Overridepublic void ship() {System.out.println(请先完成支付才能发货);}Overridepublic void cancel() {System.out.println(订单已取消);// 设置订单为已取消状态order.setState(new CancelledState());}
}PaidState代表订单已支付的状态在此状态下无法再次下单或支付但可以进行发货和取消操作。发货时会将订单状态转换为ShippedState取消则转换为CancelledState。 public class PaidState extends OrderState {Overridepublic void place() {System.out.println(请勿重复下单);}Overridepublic void pay() {System.out.println(订单已支付无需再次支付);}Overridepublic void ship() {System.out.println(订单开始发货...);// 转换状态至“已发货”状态order.setState(new ShippedState());}Overridepublic void cancel() {System.out.println(正在申请退款...);// 设置订单为已取消状态order.setState(new CancelledState());}
}ShippedState代表订单已发货的状态在此状态下仅能查看状态不能执行其他操作。 public class ShippedState extends OrderState {Overridepublic void place() {System.out.println(请勿重复下单);}Overridepublic void pay() {System.out.println(订单已支付无需再次支付);}Overridepublic void ship() {System.out.println(订单已发货无需再次发货);}Overridepublic void cancel() {System.out.println(您已无法取消已发货的订单);}
}CancelledState代表订单已取消的状态同样只能查看状态不能执行其他操作。 public class CancelledState extends OrderState {Overridepublic void place() {System.out.println(您的订单已取消请重新下单);}Overridepublic void pay() {System.out.println(该订单已取消无法进行支付);}Overridepublic void ship() {System.out.println(该订单已取消无法发货);}Overridepublic void cancel() {System.out.println(订单已处于取消状态);}
}环境角色Order持有当前订单状态并提供与订单状态相关联的操作方法如place()、pay()等。当调用这些方法时实际上是委托给当前持有的状态对象去执行相应的行为。 // 环境角色
public class Order {private OrderState state;public void setState(OrderState state) {this.state state;state.setOrder(this);}public void place() {state.place();}public void pay() {state.pay();}public void ship() {state.ship();}public void cancel() {state.cancel();}
}应用端示例OrderStateMachineDemo 创建一个新订单实例初始状态下是CreatedState。然后按照实际业务流程调用place()、pay()、ship()和cancel()方法根据不同的状态订单的行为会有不同的响应并可能触发状态的转换。
// 应用端示例
public class OrderStateMachineDemo {public static void main(String[] args) {Order order new Order();order.setState(new CreatedState()); // 初始状态为“已创建”order.place(); // 根据状态进行操作order.pay();order.ship();order.cancel();}
}测试结果 四、优缺点分析
状态模式的优点在于
模块化状态行为各状态行为被划分到各自的具体状态类中便于理解和维护。增强灵活性添加新状态或修改状态行为不涉及其他状态逻辑利于扩展。消除条件分支移除了大量基于状态判断的条件语句提高了程序内聚性。
潜在挑战可能包括
过多具体状态类随着状态数量增加具体状态类的数量也会增长可能影响系统组织结构简洁性。复杂状态转换逻辑状态间转换规则复杂时需额外关注状态转换的一致性和正确性。 总结
状态模式利用状态驱动的方式对对象行为进行有效管理使得软件能够根据对象状态的变化动态调整行为。合理运用状态模式可以提升系统对于复杂状态变化场景的适应能力同时优化代码结构保持高可维护性和扩展性。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/90225.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!