美文网首页
创建型 工厂模式(下)(扩展 抽象工厂)(了解即可)

创建型 工厂模式(下)(扩展 抽象工厂)(了解即可)

作者: _River_ | 来源:发表于2021-05-02 13:39 被阅读0次
简单工厂和工厂方法中,类只有一种分类方式。
比如,在规则配置解析那个例子中,解析器类只会根据配置文件格式(Yaml 、Propertie 、Json、Xml、……)来分类。
但是,如果类有两种分类方式,
比如,我们既可以按照配置文件格式来分类,也可以按照解析的对象(Rule 规则配置还是 System 系统配置)来分类,那就会对应下面这 8 个 parser 类。


针对规则配置的解析器:基于接口IRuleConfigParser
YamlRuleConfigParser
PropertiesRuleConfigParser
JsonRuleConfigParser
XmlRuleConfigParser


针对系统配置的解析器:基于接口ISystemConfigParser
 YamlSystemConfigParser
PropertiesSystemConfigParser
JsonSystemConfigParser
XmlSystemConfigParser


针对这种特殊的场景,如果还是继续用工厂方法来实现的话,我们要针对每个 parser 都编写一个工厂类,也就是要编写 8 个工厂类。

抽象工厂就是针对这种非常特殊的场景而诞生的。
我们可以让一个工厂负责创建多个不同类型的对象(IRuleConfigParser、ISystemConfigParser 等),而不是只创建一种 parser 对象。

public interface IConfigParserFactory {
  IRuleConfigParser createRuleParser();
  ISystemConfigParser createSystemParser();
  //此处可以扩展新的parser类型,比如IBizConfigParser
}

public class YamlConfigParserFactory implements IConfigParserFactory {
  @Override
  public IRuleConfigParser createRuleParser() {
    return new YamlConfigParser();
  }

  @Override
  public ISystemConfigParser createSystemParser() {
    return new YamlSystemConfigParser();
  }
}

public class PropertiesConfigParserFactory implements IConfigParserFactory {
  @Override
  public IRuleConfigParser createRuleParser() {
    return new PropertiesRuleConfigParser();
  }

  @Override
  public ISystemConfigParser createSystemParser() {
    return new PropertiesSystemConfigParser();
  }
}

// 省略JsonConfigParserFactory和XmlConfigParserFactory代码

相关文章

网友评论

      本文标题:创建型 工厂模式(下)(扩展 抽象工厂)(了解即可)

      本文链接:https://www.haomeiwen.com/subject/yxptdltx.html