《设计模式》之策略模式

定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用此算法的客户。

 

类型:

行为型设计模式

 

适用场景:

比如电商平台的一些常见活动(促销、满减、立减、返现等)。

我们还可以这样理解,在一个系统中有很多类,其区别在于行为不同,策略模式可以让某个对象动态的选择某个行为(也就是某个策略)

策略还可以理解为运算符的+ - * / ,旅行时所要乘坐的交通工具,穿衣时所要选择的衣服...等等等

 

优点

符合开闭原则

减少if..else等选择结构语句

 

缺点

客户必须知道所有的策略类,并选择要使用的策略

产生许多策略类

 

代码实现

定义Payment.java接口文件

public interface Payment {
    public void pay();
}

创建具体支付策略并实现Payment接口

Alipay.java策略

public class Bankcard implements Payment {
    @Override    public void pay() {
        System.out.println("使用银行卡付款");    }
}

Bankcard.java策略

public class Bankcard implements Payment {
    @Override    public void pay() {
        System.out.println("使用银行卡付款");    
    }
}

Wechatpay.java策略

public class Wechatpay implements Payment {
    @Override    public void pay() {
        System.out.println("使用微信支付");    
    }
}

创建PaymentSystem.java类封装具体策略

public class PaymentSystem {
  private Payment payment;    
  public PaymentSystem(Payment payment) {
        this.payment = payment;    
    }

    public void execute(){
        payment.pay();    
    }
}

 

Client.java类 客户调用

public class Client {
    public static void main(String[] args) {
        PaymentSystem paymentSystem=null;        
      String paymentType="alipay";       
      if("alipay".equalsIgnoreCase(paymentType)){
            paymentSystem=new PaymentSystem(new Alipay());        
      }else if("bankcard".equalsIgnoreCase(paymentType)){
            paymentSystem=new PaymentSystem(new Bankcard());       
      }else if("wechatpay".equalsIgnoreCase(paymentType)){
            paymentSystem=new PaymentSystem(new Wechatpay());       
      }
        paymentSystem.execute();   
    }
}

Client类中使用paymentType变量模拟具体配置,然后通过if..else来实现具体的策略

 

UML类图

 

《设计模式》之策略模式

 

 

《设计模式》之策略模式

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值