美文网首页
策略模式,是如何解耦算法的?

策略模式,是如何解耦算法的?

作者: 程就人生 | 来源:发表于2022-05-21 18:08 被阅读0次

策略模式,是对谁和谁的解耦?

策略模式,怎么用?


策略模式(Strategy Pattern),定义了一系列算法并分别封装起来,算法间可以互换。它是一种行为型模式。

特点:对算法和算法使用者进行解耦。

业务场景:对算法和算法使用者进行分离的场景。

关键代码:一个策略接口类及一系列算法实现。

下面看UML类图:


类图说明:支付策略接口类IPayStrategy,它有两个实现类AliyunPay阿里云支付类、WxinPay微信支付类,还可以扩展更多的其他支付类;Order订单类,算法的使用者,最终只使用一种支付算法。

下面看代码实现:

1.支付策略接口类;

/**
 * 1.支付策略接口类
 * @author 程就人生
 * @Date
 */
public interface IPayStrategy {

  /**
   * 支付
   * @param money 支付金额
   */
  public void pay(double money);
}

2.支付具体实现类;

/**
 * 2.1 阿里云支付
 * @author 程就人生
 * @Date
 */
public class AliyunPay implements IPayStrategy{

  @Override
  public void pay(double money) {
    System.out.println("使用支付宝支付:" + money + "元");
  }
}
/**
 * 2.2 微信支付
 * @author 程就人生
 * @Date
 */
public class WxinPay implements IPayStrategy{

  @Override
  public void pay(double money) {
    System.out.println("使用微信支付:" + money + "元");
  }
}

3.订单类,支付策略的使用者;


/**
 * 3.订单简单实现
 * @author 程就人生
 * @Date
 */
public class Order {
    private IPayStrategy payStrategy;
    
    private double orderPrice;

  public Order(IPayStrategy payStrategy) {
    this.payStrategy = payStrategy;
  }
    
    public void pay(){
      payStrategy.pay(orderPrice);
    }

  public double getOrderPrice() {
    return orderPrice;
  }

  public void setOrderPrice(double orderPrice) {
    this.orderPrice = orderPrice;
  }
}

4.测试代码;

public static void main(String[] argo){
    // 生成的订单,使用支付宝支付
    Order order1 = new Order(new AliyunPay());
    order1.setOrderPrice(100);
    order1.pay();
    
    // 生成的订单,使用微信支付
    Order order2 = new Order(new WxinPay());
    order2.setOrderPrice(200);
    order2.pay();
}

运行结果:

使用支付宝支付:100.0元
使用微信支付:200.0元

这段代码的意思是:在网上下了两个订单,一个使用支付宝支付,一个使用微信支付。一个订单,要么使用微信支付,要么使用支付宝支付,当然还可以扩展其他类型的支付,任凭客户选择其中的一种支付方式。这就是策略模式的简单使用。

最后总结

策略模式,是对算法和算法使用者的解耦。从代码优化上来看,可以避免多重条件判断if else 、switch等。有利于扩展,只需增加策略的实现类,符合开闭原则。

在你的项目中,有类似于支付这样的场景吗?

如果有,你是怎么处理的?是否还有优化的空间?

相关文章

  • 策略模式,是如何解耦算法的?

    策略模式,是对谁和谁的解耦? 策略模式,怎么用? 策略模式(Strategy Pattern),定义了一系列算法并...

  • 设计模式之策略模式

    策略模式 1、什么是策略模式     策略模式让算法独立于使用它的客户而独立变化。策略模式重点是封装不同的算法和行...

  • java23种设计模式-策略模式

    1. 策略模式的结构 策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式...

  • 【Java进阶营】java23种设计模式-策略模式

    1. 策略模式的结构 策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式...

  • PHP中常见的五种设计模式

    策略模式 策略模式是对象的行为模式,用意是对一组算法的封装。动态的选择需要的算法并使用。 策略模式指的是程序中涉及...

  • 策略、工厂模式融合 InitializingBean

    策略、工厂模式融合 InitializingBean 策略、工厂模式分别是什么 策略模式 策略模式是将不同的算法封...

  • 实际项目运用之Strategy模式(策略模式)

    1. 策略模式概要 策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通...

  • 设计模式笔记(15)--策略模式

    策略模式 GOF对于策略模式的定义是:“策略模式定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法...

  • 策略模式

    什么是策略模式? 策略模式定义了一系列算法,并将算法封装起来,而且使他们可以相互替换。策略模式让算法独立于使用它的...

  • 策略模式优化 if else

    策略模式 什么是策略模式? 策略模式的定义与特点 策略(Strategy)模式的定义:该模式定义了一系列算法,并将...

网友评论

      本文标题:策略模式,是如何解耦算法的?

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