设计模式实战——策略模式
Posted fbw-gxy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式实战——策略模式相关的知识,希望对你有一定的参考价值。
最近本来想优化一个单查为批量查询,然后一顿侧滑之后,反而改了下别人策略的实现,具体的工厂方法实现如下:
@Component public class TestFactory implements InitializingBean, ApplicationContextAware { private ApplicationContext applicationContext; public static Map<TestEnum, AbstractConsignTab> strategyMap = Maps.newConcurrentMap(); @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext = applicationContext; } @Override public void afterPropertiesSet(){ Map<String, AbstractConsignTab> childList = applicationContext.getBeansOfType(AbstractTestTab.class); for (Map.Entry<String, AbstractTestTab> abstractConsignTab : childList.entrySet()) { strategyMap.put(TestEnumm.getByClassName(abstractConsignTab.getKey()),abstractConsignTab.getValue()); } }
public static AbstractTestTab getTestTabStrategy(Integer tab) { TestEnum tabEnum = TestEnum.get(tab); return strategyMap.get(tabEnum); } }
具体枚举实现如下:
public enum TestEnum { //tab枚举类 Tab0(0, "测试0","test0TabStrategy"), Tab1(1, "测试1","test1TabStrategy"), Tab2(2, "测试2","test2TabStrategy"), Tab3(3, "测试3","test3TabStrategy"), Tab4(4, "测试4","test4TabStrategy"), Tab5(5, "测试5","test5TabStrategy") ; public int id; public String name; public String className; TabEnum(int id, String name,String className) { this.id = id; this.name = name; this.className=className; } static Map<Integer, TabEnum> ENUM_MAP = Maps.newHashMap(); static Map<String, TabEnum> ENUM_CLASS_MAP = Maps.newHashMap(); static { Stream.of(TabEnum.values()).forEach(obj -> { ENUM_MAP.put(obj.id, obj); ENUM_CLASS_MAP.put(obj.className,obj); }); } public static TabEnum get(Integer id) { return id == null ? null : ENUM_MAP.get(id); } public static TabEnum getByClassName(String className) { return className == null ? null : ENUM_CLASS_MAP.get(className); } }
注意下各个实现类,最好指定name,防止类本身重命名,
以上是关于设计模式实战——策略模式的主要内容,如果未能解决你的问题,请参考以下文章
Springboot整合策略模式概念->使用场景->优缺点->企业级实战