《设计模式》之策略模式

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

 

类型:

行为型设计模式

 

适用场景:

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

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

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

 

优点

符合开闭原则

减少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类图

 

《设计模式》之策略模式_第1张图片

 

 

《设计模式》之策略模式_第2张图片

你可能感兴趣的:(设计模式)