策略模式是一个非常实用的设计模式,指定义了一类算法并将其封装起来,并使得它们之间可以灵活地切换,并且不影响客户端。
1,从一个例子开始
我们常常会在网上买东西,很多购物平台都会有着各种各样的优惠策略供你选择例如满减优惠、返现优惠等等。
假设现在要开发一个商城系统,并要开发优惠策略,需要实现不使用优惠、满减优惠和返现优惠三个策略。
这一步很简单,我们将优惠进行抽象,创建一个优惠接口Promotion
如下:
package fun.swsk33site.strategy.promotion;
import fun.swsk33site.strategy.model.Order;
/**
* 促销活动抽象接口
*/
public interface Promotion {
/**
* 执行促销策略
*
* @param order 传入订单进行相应折扣
*/
void doPromotion(Order order);
}
复制代码
然后创建该接口的实现类NoPromotion
、FullDiscountPromotion
和CashBackPromotion
分别代表不使用优惠、满减优惠和返现优惠:
package fun.swsk33site.strategy.promotion.impl;
import fun.swsk33site.strategy.model.Order;
import fun.swsk33site.strategy.promotion.Promotion;
/**
* 不使用优惠
*/
public class NoPromotion implements Promotion {
@Override
public void doPromotion(Order order) {
System.