java策略工厂

工厂类

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"));
    }
}

你可能感兴趣的:(常用代码,java,开发语言)