二、状态设计模式

2020-03-31  本文已影响0人  奔跑吧老王

话不多说,先上类图:

image.png

商品接口类:

public interface GoodsState {

     Integer isMarket=0;
     void marketUp(GoodsOperator goodsOperator);
     void marketDown(GoodsOperator goodsOperator);
     void toAudit(GoodsOperator goodsOperator);
     Integer getIsMarket();
}

商品抽象类:

public abstract  class AbsGoodsState  implements GoodsState{

    public static  final RuntimeException EXCEPTION =new RuntimeException("不允许的操作!!!");

    @Override
    public void marketUp(GoodsOperator goodsOperator) {
        throw  EXCEPTION;
    }

    @Override
    public void marketDown(GoodsOperator goodsOperator) {
        throw  EXCEPTION;
    }

    @Override
    public void toAudit(GoodsOperator goodsOperator) {
        throw  EXCEPTION;
    }
}

上架实现子类

public class MarketUpState extends AbsGoodsState{
    @Autowired
    private GoodsMapper goodsMapper;

    @Override
    public void marketUp(GoodsOperator goodsOperator) {
        List<String> strings = goodsOperator.getStrings();
        Integer shopId = goodsOperator.getShopId();
        goodsMapper.sellerOperatorGoodsMarketUp(strings,shopId);
    }

    @Override
    public Integer getIsMarket() {
        return 0;
    }
}

下架实现子类:

public class MarketDownState extends AbsGoodsState{

    @Override
    public Integer getIsMarket() {
        return 1;
    }
}

待审核实现子类

public class ToAuditState extends AbsGoodsState{

    @Override
    public Integer getIsMarket() {
        return 2;
    }
}

上线文类(具体操作类)

@Data
public class GoodsOperator extends AbsGoodsState{

    private GoodsState goodsState;

    private List<String> strings;

    private Integer shopId;

    @Override
    public void marketUp(GoodsOperator goodsOperator) {
        this.goodsState.marketUp(goodsOperator);
    }

    @Override
    public void marketDown(GoodsOperator goodsOperator) {
        this.goodsState.marketDown(goodsOperator);
    }

    @Override
    public void toAudit(GoodsOperator goodsOperator) {
        this.goodsState.toAudit(goodsOperator);
    }

    @Override
    public Integer getIsMarket() {
        return this.goodsState.getIsMarket();
    }
}

设计模式的最终目的是解耦、细粒度的划分不可避免的会增加很多类,细粒度代表更多的层级结构,解耦代表相互间尽量减少影响。

上一篇 下一篇

猜你喜欢

热点阅读