美文网首页
策略模式

策略模式

作者: AArman | 来源:发表于2021-05-04 16:18 被阅读0次

    Strategy: [ˈstrætədʒi] ::策略;计策;行动计划;策划;规划;部署;统筹安排;战略;战略部署

    参与角色:

    1. 策略类的抽象基类(也可以是接口)拥有不同策略类的共有方法
    2. 各种策略实现类
    3. Context类(持有策略基类的对象,可以动态随着策略对象的改变而改变行为)
      优点:
    4. 算法可以自由切换。
    5. 避免使用多重条件判断。
    6. 扩展性良好。

    缺点:

    1. 策略类会增多。
    2. 所有策略类都需要对外暴露。

    实现

    // 商品id, 支付类型
    public ResultData makeOrder(Long goodsId,String type){
        Order order = this.orderService.makeOrder(goodsId); // 生成本地的订单
        PayType payType = PayType.getByCode(type);//选择支付方式
        
        payType.get().pay(order.getId(),order.getAmount());//进行支付
        return this.ok();
    }
    
    public enum PayType {
        //支付宝        AliPay 是实现类
        ALI_PAY("1",new AliPay()),
        //微信
        WECHAT_PAY("2",new WechatPay());
    
        private String payType;
        // 这是一个接口
        private Payment payment;
        PayType(String payType,Payment payment){
            this.payment = payment;
            this.payType = payType;
        }
        //通过get方法获取支付方式
        public Payment get(){ return  this.payment;}
        
        public static PayType getByCode(String payType) {
            for (PayType e : PayType.values()) {
                if (e.payType.equals(payType)) {
                    return e;
                }
            }
            return null;
        }
    }
    

    策略模式和桥接模式的区别

    1. 策略模式和桥接模式经过学习发现,都是将一个事物的抽象和它的实现分离开来,使其两者具有一定的独立扩展的可能性,但是两者有什么区别呢?
    2. 桥接模式强调接口仅提供基本操作,而这些基本操作定义更高层次的操作,内部可以独立扩展,可不属于一个整体;策略模式强调抽象接口提供的是一种算法,Context简单调用这些算法完成操作;
    3. 桥接模式通过继承、聚合的方式组合类和对象形成更大的结构;而策略模式则通过接口之间的协作完成不同功能的组合,是一种行为模式(重点理解)
    4. 桥接模式要表达的内容比较多,结构也比较复杂,其实是接口隔离的原则,本质上把布局类的两种体系区别开来,使得他们可以松散的组合,而策略模式在解耦只是某一个算法级别的层次。客观上讲:策略模式只是桥接模式的 一部分;

    相关文章

      网友评论

          本文标题:策略模式

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