策略模式
策略模式定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。 (摘自<大话设计模式>)
这种类型的设计模式属于行为型模式。
适用场景:(参考菜鸟教程总结)
- 算法的选择性:当程序需要根据不同的情况选择不同的算法或策略时,策略模式可以很好地应用。它允许在运行时动态地切换算法,使得系统更具灵活性和可扩展性。
- 多个类似行为的存在:如果一个类拥有多个类似的行为,但每个行为在实现上有所不同,那么可以使用策略模式来将这些行为封装在独立的策略类中,并使它们可以互相替换。这样可以避免使用大量的条件语句或分支逻辑,使代码更加清晰和可维护。
- 避免暴露复杂的条件逻辑:当存在大量复杂的条件逻辑时,使用策略模式可以将这些逻辑封装在具体的策略类中,使得主体逻辑更加简洁,易于理解和维护。
选择支付方式例子:
- 付款策略接口
/**
* 付款策略
*
* @author admin
*/
public interface IPaymentStrategy {
/**
* 付款
*
* @param price 价格
*/
void pay(Double price);
}
- 付款策略接口-微信实现
/**
* 微信支付
*
* @author admin
*/
public class WechatPaymentStrategy implements IPaymentStrategy {
@Override
public void pay(Double price) {
System.out.println("微信支付:" + price + "元");
}
}
- 付款策略接口-支付宝实现
/**
* 支付宝支付策略
*
* @author admin
*/
public class AlipayPaymentStrategy implements IPaymentStrategy {
@Override
public void pay(Double price) {
System.out.println("支付宝支付:" + price + "元");
}
}
- 付款策略接口-信用卡实现
/**
* 信用卡支付策略
*
* @author admin
*/
public class CreditCardPaymentStrategy implements IPaymentStrategy {
@Override
public void pay(Double price) {
System.out.println("信用卡支付:" + price + "元");
}
}
- 商品信息
/**
* 商品
*
* @author admin
*/
public class Commodity {
// 价格
private double price;
private IPaymentStrategy paymentStrategy;
Commodity(double price, IPaymentStrategy paymentStrategy) {
this.price = price;
this.paymentStrategy = paymentStrategy;
}
public void pay() {
paymentStrategy.pay(this.price);
}
}
- 客户端
/**
* 客户端
*
* @author admin
*/
public class Client {
public static void main(String[] args) {
Commodity commodity1 = new Commodity(20.00, new WechatPaymentStrategy());
commodity1.pay();
Commodity commodity2 = new Commodity(122.00, new AlipayPaymentStrategy());
commodity2.pay();
Commodity commodity3 = new Commodity(43.00, new CreditCardPaymentStrategy());
commodity3.pay();
}
}
- 输出结果
标签:策略,Commodity,pay,price,模式,void,public From: https://www.cnblogs.com/kouhao/p/17500913.html微信支付:20.0元
支付宝支付:122.0元
信用卡支付:43.0元