策略模式

BetterY00 2019-11-17

定义:定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化不会影响到使用算法的用户。
类型行为型
适用场景

  • 系统有很多类,而它们的区别仅仅在于它们的行为不同
  • 一个系统需要动态地在几种算法中选择一种

优点

  • 开闭原则
  • 避免使用多重条件转移语句(if...else...,switch)
  • 提高算法的保密性和安全性

缺点:

  • 客户端必须知道所有的策略类,并自行决定使用哪一个策略类。
  • 产生很多策略类

案例

某知识平台的教学视频促销(满减、立减、返现)

促销策略接口

public interface PromotionStrategy {
    void doPromotion();
}

返现策略

public class FanXianPromotionStrategy implements PromotionStrategy{
    @Override
    public void doPromotion() {
        System.out.println("返现促销,返回的金额存放到慕课网用户的余额中");
    }
}

立减策略

public class LiJianPromotionStrategy implements PromotionStrategy {
    @Override
    public void doPromotion() {
        System.out.println("立减促销,课程的价格直接减去配置的价格");
    }
}

满减策略

public class ManJianPromotionStrategy implements PromotionStrategy{
    @Override
    public void doPromotion() {
        System.out.println("满减促销,满200-20元");
    }
}

促销活动

public class PromotionActivity {
    private PromotionStrategy promotionStrategy;

    public PromotionActivity(PromotionStrategy promotionStrategy) {
        this.promotionStrategy = promotionStrategy;
    }

    public void executePromotionStrategy(){
        promotionStrategy.doPromotion();
    }

}
public class Test {
    public static void main(String[] args) {
        PromotionActivity promotionActivity618 = new PromotionActivity(new LiJianPromotionStrategy());
        PromotionActivity promotionActivity1111 = new PromotionActivity(new FanXianPromotionStrategy());

        promotionActivity618.executePromotionStrategy();
        promotionActivity1111.executePromotionStrategy();
    }
}

结果:

策略模式

相关推荐