设计模式-策略模式

策略模式
简介:策略模式定义了一系列算法,并将算法封装起来,使他们可以相互替换,且算法的变化不影响使用算法的客户;把使用算法的责任和算法的实现分割开,并委派给不同的对象对这些算法进行管理
主要角色
  1. 抽象算法类(Strategy) 定义公共接口
  2. 具体策略实现类(ConCrete Strategy) 具体实现类实现具体的算法
  3. 环境类(Context) 持有一个策略类的引用,给客户端调用
    797576-20190828152408634-96886663.png
应用场景:
  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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值