设计模式:06-策略模式
原创
©著作权归作者所有:来自51CTO博客作者wx62e0d796b5814的原创作品,请联系作者获取转载授权,否则将追究法律责任
一。使用场景:对某个行为有多种算法的情形。比如电商促销,计算商品价格,6.18有相应的价格计算方法,11.11有相应的价格计算方法。可以将价格计算方法封装成策略类。
二。代码实现。
1.定义价格计算接口
package cn.edu.tju.app;
public interface DiscountStrategy {
double getDiscountPrice(double price);
}
2.定义计算打折后价格的策略类。
package cn.edu.tju.app;
public class Discount618 implements DiscountStrategy {
@Override
public double getDiscountPrice(double price) {
return price*0.618;
}
}
package cn.edu.tju.app;
public class Discount1111 implements DiscountStrategy {
@Override
public double getDiscountPrice(double price) {
return price*(1-0.1111);
}
}
3.定义策略上下文类,该类有一个成员变量discountStrategy用于接收打折策略;同时提供一个方法getDiscountPrice,该方法调用discountStrategy的getDiscountPrice方法计算打折后的价格。
package cn.edu.tju.app;
public class DiscountContext {
private DiscountStrategy discountStrategy;
public DiscountStrategy getDiscountStrategy() {
return discountStrategy;
}
public void setDiscountStrategy(DiscountStrategy discountStrategy) {
this.discountStrategy = discountStrategy;
}
public double getDiscountPrice(double price){
if(discountStrategy==null){
return price;
}
return discountStrategy.getDiscountPrice(price);
}
}
4.在主类中定义DiscountContext上下文类,并设置discountStrategy,然后调用DiscountContext类对象的getDiscountPrice方法。
package cn.edu.tju.app;
public class StrategyTest {
public static void main(String[] args) {
double originalPrice=88;
DiscountContext discountContext=new DiscountContext();
discountContext.setDiscountStrategy(new Discount618());
double finalPrice=discountContext.getDiscountPrice(originalPrice);
System.out.println(finalPrice);
discountContext.setDiscountStrategy(new Discount1111());
finalPrice=discountContext.getDiscountPrice(originalPrice);
System.out.println(finalPrice);
}
}