Java策略模式

网友投稿 238 2022-09-05

Java策略模式

定义了算法家族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化不会影响到使用算法的用户

类型:行为型

使用场景:

系统有很多类,而他们的区别仅仅在于他们的行为不同。

一个系统需要动态地在集中算法中选择一种

优点:

1.开闭原则

2.避免使用多重条件转义语句

3.提高算法的保密性和安全性

缺点:

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

产生了很多策略类

接口:

public interface PromotionsStrategy { void doPromotion();}

执行动作:

private PromotionsStrategy promotionsStrategy; public PromotionActivity(PromotionsStrategy promotionsStrategy) { this.promotionsStrategy = promotionsStrategy; } public void executePromotionsStrategy(){ promotionsStrategy.doPromotion(); }}

为空的情况:

public class EmptyPromotionStrategy implements PromotionsStrategy{ @Override public void doPromotion() { System.out.println("无处销活动"); }}

返现:

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

立减:

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

满减:

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

工厂:

import java.util.HashMap;import java.util.Map;public class PromotionsStrategyFactory { private static Map PROMOTION_STRATEGY_MAP = new HashMap(); static { PROMOTION_STRATEGY_MAP.put(PromotionKey.LIJIAN, new LiJianPromotionsStrategy()); PROMOTION_STRATEGY_MAP.put(PromotionKey.FANXIAN, new FanXianPromotionsStrategy()); PROMOTION_STRATEGY_MAP.put(PromotionKey.MANJIAN, new ManJianPromotionsStrategy()); } private static final PromotionsStrategy NON_PROMOTION = new EmptyPromotionStrategy(); private PromotionsStrategyFactory() { } public static PromotionsStrategy getPromotionStrategy(String promotionsKey) { PromotionsStrategy promotionsStrategy = PROMOTION_STRATEGY_MAP.get(promotionsKey); return promotionsStrategy == null ? NON_PROMOTION : promotionsStrategy; } private interface PromotionKey { String LIJIAN = "LIJIAN"; String FANXIAN = "FANXIAN"; String MANJIAN = "MANJIAN"; }}

测试:

public class main { public static void main(String[] args) {// PromotionActivity promotionActivity618=new PromotionActivity(new LiJianPromotionsStrategy());// PromotionActivity promotionActivity1111=new PromotionActivity(new FanXianPromotionsStrategy());//// promotionActivity618.executePromotionsStrategy();// promotionActivity1111.executePromotionsStrategy();// PromotionActivity promotionActivity=null;// String promotionKey="LIJIAN";// if(StringUtils.equals(promotionKey,"LIJIAN")){// promotionActivity=new PromotionActivity(new LiJianPromotionsStrategy());// }else if(StringUtils.equals(promotionKey,"FANXIAN")){// promotionActivity=new PromotionActivity(new FanXianPromotionsStrategy());// }// promotionActivity.executePromotionsStrategy(); String promotionKey="LIJIAN"; PromotionActivity promotionActivity=new PromotionActivity(PromotionsStrategyFactory.getPromotionStrategy(promotionKey)); promotionActivity.executePromotionsStrategy(); }}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java桥接模式
下一篇:营销技巧:当客户夸你的时候,你要学会反夸对方!
相关文章

 发表评论

暂时没有评论,来抢沙发吧~