如何使用工厂模式来实例化从配置中读取的对象?
How can I use a Factory pattern to instanciate objects read from a configuration?
这是我的问题:
我正在编写一个 Java 库,它允许以两种可能的方式之一处理特定类型的消息(但客户端可能会添加其他处理方式)。根据策略模式,我创建了以下 classes:
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{
}
现在,客户端以这样一种方式使用配置,即对于他说的每种具体类型的消息:"MessageTypeOne: ProcessorOne, MessageTypeTwo: ProcessorTwo, MessageTypeThree: ProcessorOne",确定 MessageTypeOne 类型的消息必须由 class ProcessorOne 处理,因此在..
配置可以是 xml 文件或任何其他类型的配置,这取决于客户端。
我的问题是:如何在客户端将从配置中读取的内容(根据他选择的配置类型,使用其自己的解析方式)和具体处理器的实例化之间创建一个 "link"使用工厂模式?
提前致谢
我认为很难存档。您可以通过工厂模式根据名称创建处理器实例,但不能在配置文件中关联这两个 class。我认为最简单的方法是为您的业务逻辑使用不同的工厂。例如:
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
这是我的问题: 我正在编写一个 Java 库,它允许以两种可能的方式之一处理特定类型的消息(但客户端可能会添加其他处理方式)。根据策略模式,我创建了以下 classes:
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{
}
现在,客户端以这样一种方式使用配置,即对于他说的每种具体类型的消息:"MessageTypeOne: ProcessorOne, MessageTypeTwo: ProcessorTwo, MessageTypeThree: ProcessorOne",确定 MessageTypeOne 类型的消息必须由 class ProcessorOne 处理,因此在.. 配置可以是 xml 文件或任何其他类型的配置,这取决于客户端。
我的问题是:如何在客户端将从配置中读取的内容(根据他选择的配置类型,使用其自己的解析方式)和具体处理器的实例化之间创建一个 "link"使用工厂模式?
提前致谢
我认为很难存档。您可以通过工厂模式根据名称创建处理器实例,但不能在配置文件中关联这两个 class。我认为最简单的方法是为您的业务逻辑使用不同的工厂。例如:
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