专业的JAVA编程教程与资源

网站首页 > java教程 正文

《设计模式》之策略模式(策略设计模式详解)

temp10 2024-09-30 00:31:03 java教程 201 ℃ 0 评论

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


《设计模式》之策略模式(策略设计模式详解)

类型:

行为型设计模式


适用场景:

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

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

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


优点

符合开闭原则

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



本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表