设计模式——策略模式

策略模式

策略模式从表理解,必定是有很多中策略,但是具体采用哪一种策略,那就是策略模式需要解决的问题。

策略模式定义了算法家族、分别封装起来,让他们之间可以相互替换,此模式让算法的变化不会影响到使用算法的用户。

例如模电商平台基本每个月都在做活动,如返现、打折等,这些算法的变化不需要进行停服维护,而是事先将算法都是想了,只是需要到特定的时间才会将这种算法启用。

定义算法的抽象:

public interface IPromote {
    void doPromote();
}

事先将算法进行实现:

public class Cashback implements IPromote {
    @Override
    public void doPromote() {
        System.out.println("返现活动开启");
    }
}

public class Discount implements IPromote {
    @Override
    public void doPromote() {
        System.out.println("限时打折活动");
    }
}

将算法进行注册,便于以后执行算法启用:

public class PromoteOnlineController {
    private final static Map<String,IPromote> register = new HashMap<>();
    static{
        register.put("discount",new Discount());
        register.put("cashbacl",new Cashback());
    }

    public void setOnline(String promoteName){
        register.get(promoteName).doPromote();
    }
}

执行上线活动:

    public static void main(String[] args) {
        PromoteOnlineController controller = new PromoteOnlineController();
        controller.setOnline("cashbacl");
        controller.setOnline("discount");
    }
返现活动开启
限时打折活动

执行上线活动的接口做在后台管理系统中,方便将活动进行控制。

策略模式能够最大程度的解决重复层叠的if....else嵌套,使得代码更优雅,同时适用于需要再多种算法中选择一个或多个,而且算法将来还会进行复用的场景。

拓展

现在小程序或者web应用中,在支付的时候都可以选择支付方式,支持微信支付、支付宝支付、银联支付等,这中场景就很完美匹配了策略模式,不同的支付方式对应不同的支付算法,也会调用不同的支付接口,进行策略选择放在了也用选择上,这个案例进不贴了,给读者机会去实践。

总结

策略模式的优点:

策略模式符合开闭原则
避免使用多重条件语句,如if-else,switch-case,,使用策略模式可以提高算法的保密性和安全性。

策略模式的缺点:

客户端必须知道所有的策略,并且自行决定使用哪一个策略(但是系统可以提示和限制用户的选择)。
代码中会产生很多的策略类,增加维护难度

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值