策略模式

策略模式

参考博文

http://baijiahao.baidu.com/s?id=1601547440739500969&wfr=spider&for=pc


概念

其思想是针对一组算法,将每一种算法都封装到具有共同接口的独立的类中,从而使它们可以相互替换。策略模式的最大特点是使得算法可以在不影响客户端的情况下发生变化,从而改变不同的功能。

特点

  1. 封装变化的概念。
  2. 编程中使用接口,而不是使用的是具体的实现类(面向接口编程)。

比如说我们要实现对一个数组的元素排序,但是到底是要升序还是降序,这个完全由我们来去控制。我们可以把排序的方式全部封装起来去实现同一个接口,传给替我们执行策略的类

代码

现在有个场景:客户下订单,需要采用多种支付方式。(这里仅做简单逻辑)

  • 顶层策略接口Payment

    package com.pmz.strategy;
    
    public interface Payment {
    
        void pay(int id,double account);
    
    }
    

    支付方式对外提供的统一接口

  • 支付宝支付AliPay实现顶层策略接口Payment

    package com.pmz.strategy;
    
    public class AliPay implements Payment {
        @Override
        public void pay(int id, double account) {
            System.out.println("id为"+id+"的用户,使用支付宝支付了"+account+"元");
        }
    }
    

    具体的支付方式

  • 微信支付WeChatPay实现顶层策略接口Payment

    package com.pmz.strategy;
    
    public class WechatPay implements Payment {
    
        @Override
        public void pay(int id, double account) {
            System.out.println("id为"+id+"的用户,使用微信支付了"+account+"元");
        }
    }
    

    具体的支付方式

  • 订单类 Order

    package com.pmz.strategy;
    
    public class Order {
      //将支付方式的接口作为显示引用
        private Payment payment;
      
        public Order(Payment payment){
            this.payment = payment;
        }
        //执行策略
        public void confirmOrder(int id,double account){
            payment.pay(id,account);
        }
    }
    

    执行策略

  • 测试类 PaymentStrategyTest

    package com.pmz.strategy;
    
    public class PaymentStrategyTest {
    
        public static void main(String[] args) {
            //给策略执行类传入相应的策略实现
            Order order = new Order(new WechatPay());
            //传入参数,执行策略
            order.confirmOrder(1,100.86);
        }
    }
    
  • 输出

    id为1的用户,使用微信支付了100.86元
    

优缺点

优点:

  1. 策略模式符合开闭原则。

  2. 避免使用多重条件转移语句,如 if...else...语句、switch 语句

  3. 使用策略模式可以提高算法的保密性和安全性。

缺点:

  1. 客户端必须知道所有的策略,并且自行决定使用哪一个策略类。

  2. 代码中会产生非常多策略类,增加维护难度。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1、从项目"模拟鸭子游戏"实例讲解策略模式:假如一个有个鸭子,他会叫、会飞、肤色表现不一样,有不同颜色的鸭子,而且...
    朕要回幼儿园阅读 809评论 0 0
  • 定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们之间可以相互替换,策略模式让算法独立于使它的客...
    明朗__阅读 334评论 0 0
  • 策略模式封装了变化!!! 策略模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成相同的工作,只是实现不...
    JustCode阅读 279评论 0 0
  • 引言:策略模式,顾名思义,就是:同一堆对象,不同的交流方式和语言内容,达到不同的目的。比如:同一套零件,根据不同组...
    androidjp阅读 733评论 0 2

友情链接更多精彩内容