如何使用Factory模式实例化从配置中读取的对象?

时间:2017-09-09 09:55:35

标签: java configuration factory strategy-pattern

这是我的问题: 我正在编写一个Java库,它允许以两种可能的方式之一处理特定类型的消息(但客户端可能会添加其他处理模式)。我根据策略模式创建了以下类:

    interface Processor {
        Message processMessage();
    }

    class ProcessorOne<M extends Message> implements Processor{
        M processMessage(){ //do stuff }
    }

    class ProcessorTwo<M extends Message> implements Processor{
        M processMessage(){  //do other stuff }
    }

    abstract class Message{
    }

    //example
    class MessageTypeOne extends Message{
    }
    //example
    class MessageTypeTwo extends Message{
    }

现在,客户端使用一种配置,对于每种具体类型的Message,他说:“MessageTypeOne:ProcessorOne,MessageTypeTwo:ProcessorTwo,MessageTypeThree:ProcessorOne”,确定MessageTypeOne类型的消息必须由类ProcessorOne处理等等.. 配置可以是xml文件或任何其他类型的配置,这取决于客户端。

我的问题是:如何在客户端从配置中读取(使用自己的解析方式,根据他选择的配置类型)和使用Factory模式实例化具体处理器之间创建“链接” ?

提前致谢

1 个答案:

答案 0 :(得分:0)

我认为将其存档很困难。您可以通过Factory模式根据名称创建处理器实例,但不能在配置文件中关联这两个类。我认为最简单的方法是使用不同的Factory来实现业务逻辑。例如:

    Map<String, String> conf = null; // What parsed from config
    String messageType = // What you have 
    Processor processor = ProcessorFactory.createProcessor(conf.get(messageType));
    Message message = MessageFactory.createMessage(messageType);
    // processing