精讲状态设计模式

    xiaoxiao2023-11-22  157

    什么是状态设计模式

    业务状态改变,业务逻辑改变 对象内部状态改变,对象行为改变。

    原理图

    运用场景

    一般用于订单处理

    与策略模式的区别

    两者都是解决ifelse判断问题 但是策略业务处理返回的是同一种业务对象 而状态业务处理返回的不是同种业务对象

    实现

    环境依赖 yml pom SpringUtils

    Finished

    /** * @author administrator * @desc 订单处理完成业务返回对象 */ public class Finished { public static final String STATUS = "订单处理完毕"; }

    Processing

    /** * @author administrator * @desc 订单处理中业务返回对象 */ public class Processing { public static final String STATUS = "正在处理中"; }

    OrderState

    /** * @author administrator * @desc 抽象状态 */ public interface OrderState<T> { public T orderService(); }

    OrderFinishState

    /** * @author administrator * @desc 订单处理完成业务 */ @Component public class OrderFinishState<T> implements OrderState<T> { @Override public T orderService() { return (T) Finished.STATUS; } }

    OrderProcessingState

    /** * @author administrator * @desc 订单正在处理业务 */ @Component public class OrderProcessingState<T> implements OrderState<T> { @Override public T orderService() { return (T) Processing.STATUS; } }

    OrderStateContext

    /** * @author administrator * @desc 状态设计模式上下文 */ @RestController public class OrderStateContext<T> { @Autowired private SpringUtils springUtils; @GetMapping("/state/{beanId}") public T test(@PathVariable String beanId) { OrderState<T> state = (OrderState<T>) springUtils.getBean(beanId); return state.orderService(); } }

    App

    @SpringBootApplication public class App { public static void main(String[] args) { SpringApplication.run(App.class, args); } }

    测试 http://localhost:8088/state/orderFinishState

    思想来源

    最新回复(0)