0
点赞
收藏
分享

微信扫一扫

Java策略模式

minute_5 2022-08-05 阅读 55

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

类型:行为型

使用场景:

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

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

优点:

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<String, PromotionsStrategy> PROMOTION_STRATEGY_MAP = new HashMap<String, PromotionsStrategy>();

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();

}
}

  

 



举报

相关推荐

0 条评论