设计模式-策略模式

策略模式

简介:策略模式定义了一系列算法,并将算法封装起来,使他们可以相互替换,且算法的变化不影响使用算法的客户;把使用算法的责任和算法的实现分割开,并委派给不同的对象对这些算法进行管理
主要角色
  1. 抽象算法类(Strategy) 定义公共接口
  2. 具体策略实现类(ConCrete Strategy) 具体实现类实现具体的算法
  3. 环境类(Context) 持有一个策略类的引用,给客户端调用
应用场景:
  1. 电商中的支付方式,随着版本的迭代支持的支付方式可能会越来越多
  2. 消息推送方式等
实现(支付为例)
  1. 抽象算法类
public interface PaymentStrategy {

    public void pay(int amount);

}
  1. 实现类
/******
*    信用卡支付
*
**/
public class CreditCardStrategy implements PaymentStrategy(){
    
    private String name;
    private String cardNumber;
    private String cvv;
    private String dateOfExpiry;

    public CreditCardStrategy(String nm, String ccNum, String cvv, String expiryDate){

        this.name=nm;
        this.cardNumber=ccNum;
        this.cvv=cvv;
        this.dateOfExpiry=expiryDate;
    }

     @Override
    public void pay(int amount) {
        System.out.println(amount +" paid with credit/debit card");
    }
}
/******
*    支付宝支付
*
**/
public class AlipayCardStrategy implements PaymentStrategy(){
    
    private String tel;
    private String password;
 
    public AlipayCardStrategy (String tel, String password ){

        this.tel=tel;
        this.password =password ;
     
    }

     @Override
    public void pay(int amount) {
        System.out.println(amount +" paid with Alipay");
    }
}
  1. 环境类(选择支付方式调用支付)
    public class PayContext(){
        PaymentStrategy paymentStrategy = null;
        //初始化默认支付方式
        public PayContext(PaymentStrategy paymentStrategy ){
            this.paymentStrategy = paymentStrategy ;
        }
        //选择支付方式
         public void setPaymentStrategy (PaymentStrategy paymentStrategy ){
            this.paymentStrategy = paymentStrategy ;
        }
    //支付
     public void pay(int amount ){
            paymentStrategy.pay(amount )
        }    
}
总结

优点:解耦,可读性、扩展性增强
缺点:要了解所有的实现策略方法

原文地址:https://www.cnblogs.com/monkay/p/11424538.html