如图,订单状态有New Order,Registered,Granted,Shipped,Invoiced,Cancelled,相当复杂,在不同的状态执行操作时会产生不同的影响,比如说我们要执行AddOrderLine的话,要判断订单状态,如果是Registered或Granted状态的话,订单状态会变成New Order,如果是New Order状态的话,则状态保持不变,如果是其它状态的话,则不允许AddOrderLine操作。
运用状态模式之后,
但是问题来了,例如Granted状态在执行ship()操作之后变成Shipped状态,但是ship()操作涉及到减少库存,写出库记录等等内容,这样GrantedState就要依赖于 库存Dao 了,这样会产生一个Entity 依赖高层的Dao的问题了。 请问大家应该怎么解决?
public class GrantedState extends OrderState { ship(){ InventoryDao.reduceInventory(Order); } }