您的位置:首页 > 编程语言 > Java开发

java设计模式之策略模式

2018-02-06 17:48 344 查看
 大家都知道设计模式有二十多种,光是工厂模式就分为简单工厂模式,工厂方法模式还有抽象工厂三个模式了。
在博客里我打算只介绍几种大家在日常开发里比较常用(PS:是常用不是常见)的模式,
方便大家在遇到对应的开发场景时直接用上。

介绍设计模式时,我认为最好的方法是先描述这种模式的实际应用场景,不使用模式的传统做法,使用模式的做法以及好处

我从策略模式开始说起:策略模式应用场景举例:你正在负责你公司一个商城系统的订单模块,目前商城经营两类商品,以后商品类型会增加。比如现在经营的是实体商品和话费,未来还可能有加油卡,京东天猫等购物商城电子券,游戏点券等商品你在处理这些商品的下单逻辑时,在发货时需要考虑到不同的商品处理方式不一样,比如实体商品需要线下物流发货,话费需要冲入对应手机中。不使用模式的做法:程序里if else判断商品类型,如果是实体商品就走线下发货,是话费就走充话费,以后商城加入其他商品了再修改现有逻辑,增加一个商品就改动一次下单代码。这种方法当然可行,问题是每次新增商品类型时都需要修改下单逻辑,这样商品类型很多时,代码复杂度越来越高,更不用提优雅了。好,下面我们引入策略模式,先看类图:


 左边是客户端(也就是调用方),右上方是抽象策略类,定义了实际策略的规则,对应到本例就是定义了发货规则,代码如下:


下面的三个是指抽象策略的三个不同实现类,在本例中,实体商品与话费分别对应一个实现类,也就是我们这里的具体策略类




你在处理订单的发货逻辑时,就可以根据商品的类型调用对应的实现类来完成发货。如果未来新增商品类型,你只需要新增对应的发货策略类,里面加上发货逻辑,调用处指定新增的发货策略实现类即可。可以看到策略模式就是将多种可能的业务情况封装为不同的策略,客户端根据实际情况选用不同的策略。个人觉得这种场景在实际开发中出现频率很高,而且理解起来比较简单,所以优先介绍这个模式。希望大家日后遇到类似情况时,考虑下使用策略模式是否会让你的代码看起来更优雅,以后出现更多业务情况时改动起来会更方便。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息