优点 ②策略模式提供了对开闭原则的完美支持,可以在不修改源代码的情况下,灵活增加新算法。 ③策略模式把算法的使用放到环境类中,而算法的实现移到具体策略类中,实现了二者的分离。 缺点 ①客户端必须理解所有策略算法的区别,以便适时选择恰当的算法类。 ②策略模式造成很多的策略类,增加维护难度。 import java.util.Objects; public class StrategyDemo { /** * 抽象策略角色 */ interface DiscountStrategy{ String discount(); } /** * 优惠券抵扣策略类 */ static class CouponStrategy implements DiscountStrategy{ @Override public String discount() { System.out.println("使用优惠券抵扣"); return "coupon"; } } /** * 返现促销策略类 */ static class CashBackStrategy implements DiscountStrategy{ @Override public String discount() { System.out.println("返现,直接打款到支付宝账号"); return "cashBack"; } } /** * 拼团优惠策略类 */ static class GroupBuyStrategy implements DiscountStrategy{ @Override public String discount() { System.out.println("5人成团,可以优惠"); return "groupBuy"; } } /** * 无优惠策略类 */ static class EmptyStrategy implements DiscountStrategy{ @Override public String discount() { System.out.println("无优惠"); return "empty"; } } /** * 促销活动方案类 */ static class PromotionContext{ private DiscountStrategy strategy; public PromotionContext(DiscountStrategy strategy){ this.strategy = strategy; } public String execute(){ return strategy.discount(); } } public static void main(String[] args){ PromotionContext activity = null; String promotionKey = "COUPON"; if(Objects.equals(promotionKey, "COUPON")){ activity = new PromotionContext(new CouponStrategy()); }else if(Objects.equals(promotionKey, "CASHBACK")){ activity = new PromotionContext(new CashBackStrategy()); }else if(Objects.equals(promotionKey, "GROUPBUY")){ activity = new PromotionContext(new CashBackStrategy()); } else { activity = new PromotionContext(new EmptyStrategy()); } activity.execute(); } }
策略模式demo
于 2022-06-30 07:35:37 首次发布