Java-策略设计模式

作者: 薛之涛 | 来源:发表于2019-11-09 20:59 被阅读0次

    今天 我们来学习一下策略模式,什么是策略模式呢?比如我们一个功能的实现可以有多个策略去选择,比如:出行方式可以选择:共享单车,拼车,私家车,出租等。如果将这个出行方式提供一个统一的接口,每个策略都有自己的实现类,客户端就可以通过实现具体的策略对象来完成功能,而这样的策略是可以动态替换的,扩展性和维护性及代码可读性较高,这就是就是策略模式。

    策略模式遵循的是:对修改关闭,对拓展开发的原则。且针对接口编程,而不是针对实现编程

    1.代码实现

    • 第一步写业务接口
      接下来我们用代码告诉大家一下,以我们日常网络购物为例,首先定义两个接口一个商品种类接口,一个商品名称接口:
    public interface IGoodsKinds {
        //输入商品种类方法
        String iGoodsKinds(String goodsKinds);
    }
    public interface IGoodsName {
        //输入商品名称方法
        String iGoodsName(String goodsName);
    }
    
    • 第二步实现具体类
      然后我们定义具体的实现类,商品种类实现类可以有:家用电器,瓜果蔬菜。
      商品名称也就是可以供选择的商品有:智能冰箱(家用电器),智能空调(家用电器),香蕉(瓜果蔬菜),苹果(瓜果蔬菜)等
    public class HomeAppliance implements IGoodsKinds {
        @Override
        public String iGoodsKinds() {
            return "选择购买的商品种类是:家用电器";
        }
    }
    
    public class FruitVegetable implements IGoodsKinds {
        @Override
        public String iGoodsKinds() {
            return "选择购买的商品种类是:瓜果蔬菜";
        }
    }
    
    public class AppleGoods implements IGoodsName {
        @Override
        public String iGoodsName() {
            return "选择的商品名称是:苹果";
        }
    }
    public class BananaGoods implements IGoodsName {
        @Override
        public String iGoodsName() {
            return "选择的商品名称是:香蕉";
        }
    }
    public class RefrigeratorGoods implements IGoodsName {
        @Override
        public String iGoodsName() {
            return "选择的商品名称是:智能冰箱";
        }
    }
    public class AirConditioner implements IGoodsName {
        @Override
        public String iGoodsName() {
            return "选择的商品名称是:智能空调";
        }
    }
    
    • 第三步 定义 BasePattern具体的购物流程基类
    public abstract class BasePattern {
        IGoodsKinds mIGoodsKinds;
        IGoodsName mIGoodsName;
    
        public void setGoodsKinds(IGoodsKinds iGoodsKinds){
            this.mIGoodsKinds =iGoodsKinds;
        }
    
        public void setmIGoodsName(IGoodsName mIGoodsName){
            this.mIGoodsName =mIGoodsName;
        }
    
        //打印用户选择的商品种类
        public void printGoodsKinds(){
            if(mIGoodsKinds != null){
                System.out.println(mIGoodsKinds.iGoodsKinds());
            }
        }
        //打印用户选择的商品名称
        public void printGoodsName(){
            if(mIGoodsName != null){
                System.out.println(mIGoodsName.iGoodsName());
            }
        }
    
        //公共方法,判断用户是否是会员
        public abstract String isMembers(int membersCode);
        
    }
    

    最后购物的实现类:

    public class MemberPattern extends BaseShopingPattern {
        @Override
        public String isMembers(int membersCode) {
            if(membersCode == 0){
                return "该用户为会员用户";
            }else{
                return "该用户为普通用户";
            }
        }
    }
    

    调用:



    结果打印展示:


    image.png

    2.策略模式的优缺点

    优点:
    • 可以把公共方法移动到父类,结构清晰,减少代码冗余,增强代码可读性,适用于项目庞大多个策略的情况。
    缺点:
    • 客户端需了解所有的策略类,适用于客户端知道算法或者行为的情况,多个策略会有多个实现类。

    适用场景:策略设计模式适用于某个业务或行为有多个实现类,且在一次运行中当前业务只会执行一种实现类的情况。
    完毕!

    相关文章

      网友评论

        本文标题:Java-策略设计模式

        本文链接:https://www.haomeiwen.com/subject/oasrbctx.html