您的位置:首页 > 其它

策略模式结合工厂模式减少不必要的if else

2020-07-14 04:32 381 查看

@[TOC]策略模式结合工厂模式减少不必要的if else(这里写自定义目录标题)

实现功能 - 不同平台字段对应枚举值不同,为了适配第三方平台枚举值
接口类

public interface IStrategy {

String transformEnum(String key);

}

实现类1

public class GlassClassTypeStrategy implements IStrategy {

private static Map<String ,String> map;

static {
map = new HashMap<>();
map.put("1" , "1");   /// key 第三方枚举值 , value 我方平台枚举值
map.put("2" , "3");
map.put("3" , "4");

}

@Override
public String transformEnum(String key) {
return map.get(key);
}
}

实现类2

public class HairClassTypeStrategy implements IStrategy {

private static Map<String ,String> map;

static {
map = new HashMap<>();
map.put("1" , "3");
map.put("2" , "4");
map.put("3" , "5");

}

@Override
public String transformEnum(String key) {
return map.get(key);
}
}

简单工厂

public class ContextStrategyFactory {

private ContextStrategyFactory(){}

private static Map<String , IStrategy> map ;

static {
map =new HashMap<>();
map.put(Type.GLASS_TYPE, new GlassClassTypeStrategy());
map.put(Type.HAIR_TYPE, new HairClassTypeStrategy());

}

public static String getEnumType(String type , String enumStr){
return map.get(type).transformEnum(enumStr);
}

private interface Type{
String GLASS_TYPE = "ul_glass";

String HAIR_TYPE = "ul_hair";

}
}

测试类

public class Test {

public static void main(String[] args) {
System.out.println(ContextStrategyFactory.getEnumType("ul_hair", "2"));
}
}

总结: 使用策略模式结合工厂模式可以减少大量的if else 或者 switch 语句,并且增强代码的可扩展性。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: