首页 > 其他分享 >设计模式之美--工厂模式之简单工厂

设计模式之美--工厂模式之简单工厂

时间:2022-12-13 17:46:56浏览次数:35  
标签:return String -- parser 工厂 new IRuleConfigParser 设计模式 public

核心demo代码:

public class RuleConfigParserFactory {
    public static IRuleConfigParser createParser(String configFormat) {
        IRuleConfigParser parser = null;
        if ("json".equalsIgnoreCase(configFormat)) {
            parser = new JsonRuleConfigParser();
        } else if ("xml".equalsIgnoreCase(configFormat)) {
            parser = new XmlRuleConfigParser();
        } else if ("yaml".equalsIgnoreCase(configFormat)) {
            parser = new YamlRuleConfigParser();
        } else if ("properties".equalsIgnoreCase(configFormat)) {
            parser = new PropertiesRuleConfigParser();
        }
        return parser;
    }
}

/**
 * 简单工厂
 * @author lq
 * @version : RuleConfigSource.java, v 0.1 2022年12月13日 15:37 lq Exp $
 */
public class RuleConfigSource {

    public RuleConfig load(String ruleConfigFilePath) {
        String ruleConfigFileExtension = getFileExtension(ruleConfigFilePath);
        IRuleConfigParser parser = RuleConfigParserFactory.createParser(ruleConfigFileExtension);
        if (null == parser) {
            throw new InvalidRuleConfigException("rule config file format is not support: " + ruleConfigFilePath);
        }
        String configText = "";
        RuleConfig ruleConfig = parser.parse(configText);
        return ruleConfig;
    }

    /**
     * 解析文件名,获取扩展名
     * @param ruleConfigFilePath
     * @return
     */
    private String getFileExtension(String ruleConfigFilePath) {
        return "json";
    }
}

简单工厂和单例模式的组合使用demo

/**
 * 简单工厂和单例模式的结合
 * @author lq
 * @version : RuleConfigParserAndSingletonFactory.java, v 0.1 2022年12月13日 15:34 lq Exp $
 */
public class RuleConfigParserAndSingletonFactory {

    private static final Map<String, IRuleConfigParser> ruleConfigParserMap = new HashMap<>();

    static {
        ruleConfigParserMap.put("json", new JsonRuleConfigParser());
        ruleConfigParserMap.put("xml", new XmlRuleConfigParser());
        ruleConfigParserMap.put("yaml", new YamlRuleConfigParser());
        ruleConfigParserMap.put("properties", new PropertiesRuleConfigParser());
    }

    public static IRuleConfigParser createParser(String configFormat) {
        if (StringUtils.isEmpty(configFormat)) {
            return null;
        }
        IRuleConfigParser parser = ruleConfigParserMap.get(configFormat);
        return parser;
    }
}

其他类demo:

public interface IRuleConfigParser {

    /**
     * 解析文件
     * @param configText
     * @return
     */
    RuleConfig parse(String configText);
}

public class RuleConfig {
}

public class JsonRuleConfigParser implements IRuleConfigParser {
    @Override
    public RuleConfig parse(String configText) {
        return null;
    }
}

public class PropertiesRuleConfigParser implements IRuleConfigParser {
    @Override
    public RuleConfig parse(String configText) {
        return null;
    }
}

public class XmlRuleConfigParser implements IRuleConfigParser {
    @Override
    public RuleConfig parse(String configText) {
        return null;
    }
}

public class YamlRuleConfigParser implements IRuleConfigParser {
    @Override
    public RuleConfig parse(String configText) {
        return null;
    }
}

标签:return,String,--,parser,工厂,new,IRuleConfigParser,设计模式,public
From: https://www.cnblogs.com/rbwbear/p/16979431.html

相关文章

  • 复盘双12就是复盘团队协同工具的实操能力
    据报道,“交个朋友”目前已经成立专注于淘宝直播业务的淘宝事业部,由崔东升负责,组建初期,团队规模已达100人。“交个朋友”方面介绍,公司成立淘宝事业部是深耕淘宝直播业务的必......
  • django路由分发、名称空间、虚拟环境、视图层之FBV与CBV及模板层
    目录路由分发名称空间虚拟环境视图层之必会三板斧JsonResponse对象视图层之request对象获取文件视图层之FBV与CBVCBV源码剖析(重点)模板层null路由分发django支持每个应用......
  • 北理工46. 猜数字
    46.猜数字有如下一组数字,其中每个数字都在1~63之间, 1 3 5 7 9111315171921232527293133353739414345474951535557596163 ......
  • @ControllerAdvice注解的使用
    ControllerAdvice注解打在类上面,为使用了@ExceptionHandler、@InitBinder、@ModelAttribute注解的方法所在类服务的。@ControllerAdvice可以指定需要拦截的Controller,拦截......
  • 编写合格的C代码(1):通过编译选项将特定警告视为错误
    目录快速设定向错误的执念开炮,向C编译器开炮编译警告应当被忽略吗?warning不重要吗?(1)编库时调用了未定义函数(非编译器内置函数),编译只报warning;链接该库时报error(2)编......
  • 前端常用的正则校验
     例如element常用的必填校验:   固话和手机号pattern:/^(((\d{3,4}-)?[0-9]{7,8})|(1(3|4|5|6|7|8|9)\d{9}))$/ 手机号pattern:/^1[3|4|5|6|7|8|9][0-......
  • 测试
    测试含有HTTP上下文的业务逻辑,比如Cookie、URL中的QueryString在平时的代码过程中,常常会和HTTP上下文HttpContext打交道,最常见的如request、response、cookie、querystrin......
  • 【学习笔记】UKK线性求后缀树
    (话说是不是可以直接SAM线性构造啊QAQ)构造过程直观图入门......
  • 针对Vmware打开BIOS中VT虚拟化相关后仍然报错
    安装虚拟机时报错问题现象: 通过VMware虚拟机安装Centos时提示弹出提示框,“已将该虚拟机配置为使用64位客户机操作系统,但是,无法执行64位操作。”具体提示如下图所示:在这里......
  • 如何抠图换背景,分享3秒钟快速抠图的方法教程,简单方便
    PS抠图比较耗费时间,对于新手来说操作起来也比较困难。想要快速抠图换背景,提高效率应该怎么做呢?别着急,网上有很多AI智能抠图的工具可以使用,就算是新手也能轻松操作,3秒快速抠......