定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用此算法的客户。
类型:
行为型设计模式
适用场景:
比如电商平台的一些常见活动(促销、满减、立减、返现等)。
我们还可以这样理解,在一个系统中有很多类,其区别在于行为不同,策略模式可以让某个对象动态的选择某个行为(也就是某个策略)
策略还可以理解为运算符的+ - * / ,旅行时所要乘坐的交通工具,穿衣时所要选择的衣服...等等等
优点
符合开闭原则
减少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类图