Strategy Pattern,是 Java 常用的设计模式之一。它提供了一个类的行为或其算法在运行时可以更改的能力。
它的结构
一个简单的演示
演示代码
// 抽象策略角色
public interface SaleStrategy {
double getRetailPrice(double tagPrice);
}
// 具体策略角色
public class PublicSaleStrategy implements SaleStrategy {
@Override
public double getRetailPrice(double tagPrice) {
return tagPrice * 0.95D;
}
}
public class SuperSaleStrategy implements SaleStrategy {
@Override
public double getRetailPrice(double tagPrice) {
return tagPrice * 0.88D;
}
}
public class BossStrategy implements SaleStrategy {
@Override
public double getRetailPrice(double tagPrice) {
return tagPrice * 0.80D;
}
}
// 环境角色
public class CarShop {
private SaleStrategy saleStrategy;
private double tagPrice = 100000.00D;
public CarShop(SaleStrategy saleStrategy) {
this.saleStrategy = saleStrategy;
}
public void getPrice() {
System.out.println(saleStrategy.getRetailPrice(tagPrice));
}
}
// 测试类
public class CarShopTest {
@org.junit.Test
public void getPrice() {
SaleStrategy strategy = new PublicSaleStrategy();
CarShop car = new CarShop(strategy);
car.getPrice();
strategy = new SuperSaleStrategy();
car = new CarShop(strategy);
car.getPrice();
strategy = new BossStrategy();
car = new CarShop(strategy);
car.getPrice();
}
}
运行结果
总结
策略模式改变的是行为,在实际开发中经常会遇到类似的实现。例如,Jedis 的单机、线程池与集群模式。