工厂类
package com.ouyeel.platform.components.rzcore.foundation.service.my.strategy;
import com.google.common.collect.ImmutableMap;
import java.util.Map;
public class StrategyFactory {
static Map strategyMap;
static{
strategyMap = ImmutableMap.of(
"one",new OneStrategyModel(),
"two",new TwoStrategyModel(),
"three",new ThreeStrategyModel()
);
}
public static class SingletonHolder{
public static StrategyFactory strategyFactory = new StrategyFactory();
}
public static StrategyFactory getInstance(){
return SingletonHolder.strategyFactory;
}
public StrategyModel getConcreteStrategy(String key){
return strategyMap.get(key);
}
}
父类
package com.ouyeel.platform.components.rzcore.foundation.service.my.strategy;
public interface StrategyModel {
String executeFun();
}
子类
package com.ouyeel.platform.components.rzcore.foundation.service.my.strategy;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class OneStrategyModel implements StrategyModel{
Logger logger = LoggerFactory.getLogger(StrategyModel.class);
@Override
public String executeFun() {
logger.info("OneStrategyModel---OneStrategyModel---OneStrategyModel");
return null;
}
}
package com.ouyeel.platform.components.rzcore.foundation.service.my.strategy;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class TwoStrategyModel implements StrategyModel{
Logger logger = LoggerFactory.getLogger(StrategyModel.class);
@Override
public String executeFun() {
logger.info("TwoStrategyModel---TwoStrategyModel---TwoStrategyModel");
return null;
}
}
package com.ouyeel.platform.components.rzcore.foundation.service.my.strategy;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class ThreeStrategyModel implements StrategyModel{
Logger logger = LoggerFactory.getLogger(StrategyModel.class);
@Override
public String executeFun() {
logger.info("ThreeStrategyModel---ThreeStrategyModel---ThreeStrategyModel");
return null;
}
}
业务层调用
package com.ouyeel.platform.components.rzcore.foundation.service.my.service;
import java.util.Map;
public interface StrategyService {
String testFun(Map reqMap);
}
package com.ouyeel.platform.components.rzcore.foundation.service.my.service.impl;
import com.google.common.collect.ImmutableMap;
import com.ouyeel.platform.components.rzcore.foundation.service.my.service.StrategyService;
import com.ouyeel.platform.components.rzcore.foundation.service.my.strategy.StrategyFactory;
import com.ouyeel.platform.components.rzcore.foundation.service.my.strategy.StrategyModel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Map;
@Service
@Transactional
public class StrategyServiceImpl implements StrategyService {
Logger logger = LoggerFactory.getLogger(StrategyService.class);
@Override
public String testFun(Map reqMap) {
logger.info(String.format("testFun:[%s]",reqMap.get("key")));
StrategyModel model = StrategyFactory.getInstance().getConcreteStrategy(reqMap.get("key"));
if(model == null){
return null;
}
model.executeFun();
logger.info("1111111111111111111111");
return null;
}
//ImmutableMap.of最多添加5个键值对
public static void main(String[] args) {
Map map = ImmutableMap.of(
"one","one",
"two","two",
"three","three",
"","four",
//"five","five",
"six","six"
);
Map reqMap = ImmutableMap.builder()
.put( "one","one" )
.put( "1","1" )
.put( "2","2" )
.put( "3","3" )
.put( "4","4" )
.put( "5","5" )
.put( "6","6" )
.put( "7","7" )
.put( "8","8" )
.put( "9","9" )
.build();
System.out.println("value:" + reqMap.get("8"));
}
}