返回
策略模式简析:明晰编码,以变应不变
前端
2024-02-02 23:03:17
策略模式:明晰编码,以变应不变
在软件开发的旅程中,我们经常会遇到这样一个问题:系统中存在许多不同的条件语句,它们负责处理不同的情况。随着时间的推移,这些条件语句会变得越来越复杂,越来越难以维护。这时,策略模式便闪亮登场了。
策略模式,顾名思义,就是把不同的算法封装成独立的类,然后根据不同的情况选择不同的策略类来执行不同的算法。这样,我们就避免了使用多重条件语句,使代码更加清晰易懂,也更容易维护。
策略模式的优点显而易见:
- 解耦算法与客户端代码: 策略模式将算法从客户端代码中分离出来,使客户端代码更加简洁,更容易理解和维护。
- 提高代码可重用性: 策略模式允许我们重用现有的算法实现,从而减少重复代码。
- 提高代码的可扩展性: 策略模式使我们能够轻松地添加新的算法,而无需修改现有代码。
举个例子来说,假设我们正在开发一个电商系统,需要根据不同的支付方式来计算不同的运费。我们使用策略模式可以将不同的运费计算方法封装成独立的类,然后根据用户的支付方式选择不同的策略类来计算运费。
interface ShippingStrategy {
double calculateShippingCost(Order order);
}
class FreeShippingStrategy implements ShippingStrategy {
@Override
public double calculateShippingCost(Order order) {
return 0;
}
}
class StandardShippingStrategy implements ShippingStrategy {
@Override
public double calculateShippingCost(Order order) {
return 5.99;
}
}
class ExpressShippingStrategy implements ShippingStrategy {
@Override
public double calculateShippingCost(Order order) {
return 9.99;
}
}
class Order {
private double amount;
private ShippingStrategy shippingStrategy;
public Order(double amount, ShippingStrategy shippingStrategy) {
this.amount = amount;
this.shippingStrategy = shippingStrategy;
}
public double calculateShippingCost() {
return shippingStrategy.calculateShippingCost(this);
}
}
public class Main {
public static void main(String[] args) {
Order order = new Order(100.0, new FreeShippingStrategy());
System.out.println("Shipping cost: " + order.calculateShippingCost());
order = new Order(100.0, new StandardShippingStrategy());
System.out.println("Shipping cost: " + order.calculateShippingCost());
order = new Order(100.0, new ExpressShippingStrategy());
System.out.println("Shipping cost: " + order.calculateShippingCost());
}
}
在上面的代码中,我们定义了一个接口ShippingStrategy
,它定义了计算运费的方法calculateShippingCost()
。然后,我们定义了三个实现ShippingStrategy
接口的类:FreeShippingStrategy
、StandardShippingStrategy
和ExpressShippingStrategy
。这些类分别代表免费配送、标准配送和快速配送三种配送方式。
最后,我们在Order
类中使用策略模式来计算运费。Order
类有一个成员变量shippingStrategy
,它代表所选择的配送方式。在计算运费时,Order
类调用shippingStrategy
对象的calculateShippingCost()
方法来计算运费。
策略模式是一种非常灵活的设计模式,它可以用于解决各种各样的问题。如果您正在寻找一种方法来解耦算法与客户端代码、提高代码可重用性或提高代码的可扩展性,那么策略模式是一个很好的选择。