设计模式-策略工厂

设计模式-策略工厂

概念

根据输入条件来由工厂动态产生符合条件的策略类对象,并调用相应策略方法实现功能

这么说可能有点抽象举一个例子,比如我们在生活中的自动售货机一样,他的电子屏幕上面展示不同的商品,当我们选择具体的商品后支付,售货机就会给我们相应的商品。这里 选择商品=输入条件,售货机=策略工厂类,我们保证条件在策略工厂中有具体的实现即可,这样策略工厂就能根据具体的条件来保证能拿到不同的策略实现类,再调用方法

使用场景

因为设计模式更多偏向于编程上的设计理念,应用场景本人也是用的不多,主要是储备以防不时之需,如果有大神不吝赐教的话万分感激,我这里主要用于多层if…else逻辑方案判断执行的解耦,比如考虑到后期的业务拓展,逻辑判断就会再次增加,需要在代码上修改,不管从扩展性还是代码整洁上看都不合适

原代码:

if(status == 0){//.....条件执行逻辑A
}else if(status == 1){//.....B
}else if(status == 2){//.....C
}

思路:

1.定义接口,不同条件下的执行封装成具体的接口实现类

2.由工厂统一管理策略实现类,根据策略的不同返回具体的实现类

接口类

public interface RefundInterface {void refund(OmOrdersBO omOrdersBO);
}

策略实现类

public class RefundZero implements RefundInterface {@Overridepublic void refund(OmOrdersBO omOrderSBO, RedisTemplate redisTemplate) {// ....A具体实现逻辑A}
}public class RefundOne implements RefundInterface {@Overridepublic void refund(OmOrdersBO omOrderSBO) {// ...具体实现逻辑B}
}public class RefundTwo implements RefundInterface {@Overridepublic void refund(OmOrdersBO omOrderSBO) {// ...具体实现逻辑C}
}

工厂类

public class RefundStrategyFactory {private static final Map<Integer, RefundInterface> map = new HashMap<>();//   使用map进行存储策略类,后期再有扩展只需要增加具体的键值对static {map.put(OrderType.ZERO.ordinal()


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部