Java 在这种情况下创建工厂的最佳实践
我正在使用一个API——向德鲁伊发送消息 查看文档和示例代码,看起来发送方是异步的,线程安全的 下面是来自API的示例 我的问题是,当我必须创建具有不同配置的多个发送器并能够重用它们时,要应用什么样的设计/模式 发件人每秒能够发送超过100k条消息,因此我不想重新加载发件人的配置 我的想法是创建一个发送者工厂,根据消息类型获取特定的发送者并发送消息Java 在这种情况下创建工厂的最佳实践,java,design-patterns,Java,Design Patterns,我正在使用一个API——向德鲁伊发送消息 查看文档和示例代码,看起来发送方是异步的,线程安全的 下面是来自API的示例 我的问题是,当我必须创建具有不同配置的多个发送器并能够重用它们时,要应用什么样的设计/模式 发件人每秒能够发送超过100k条消息,因此我不想重新加载发件人的配置 我的想法是创建一个发送者工厂,根据消息类型获取特定的发送者并发送消息 想法?这不是一个真正可以回答的问题(例如最佳实践),可能更适合 然而,我很无聊,所以这里有一个意识流的答案: 你所描述的听起来更像是一个“缓存”或“
想法?这不是一个真正可以回答的问题(例如最佳实践),可能更适合 然而,我很无聊,所以这里有一个意识流的答案: 你所描述的听起来更像是一个“缓存”或“池”,而不仅仅是一个工厂。逻辑基本上如下所示(我不知道宁静,所以这只是伪代码) 如果是这样的话,我会说您已经创建了一个“发送者池”或“发送者缓存”。当然,此findOrCreateSenderForMessageType需要对工厂的引用
public Sender pool.findOrCreateSenderForMessageType(MessageType type) {
Sender sender = cache.findByType(type);
if(sender == null) {
sender = factory.createSender(type);
cache.addSenderForType(sender, type);
}
return sender;
}
因此,我会说您使用的是工厂,在上下文中这样做似乎是有效的,但从更大的角度来看,我会说您使用的是缓存/池来解决问题。虽然游泳池也是一种工厂。设计模式中使用的词语非常模糊
它在概念上似乎与“”非常相似。也许你可以这样描述:
一种消息路由器,它根据消息类型选择合适的发送者工厂
而且
一个发送者池,用于缓存已创建的发送者以供重用
而且
为给定邮件类型创建发件人的发件人工厂
所有这三个概念都可以表示为三个不同的类,或者所有三个概念都可以组合在一个类中
例如,路由器和缓存可以组合在一起,以便路由器具有映射
。如果每种邮件类型只需要一个发件人,这就足够了
或者,如果您可能选择使用不同的发送方,因为发送方当前正忙或已签出(类似于线程池或连接池的工作方式),那么您可能需要一个或多个专用于实现该池的类,最终可能会得到类似于Map
public Sender pool.findOrCreateSenderForMessageType(MessageType type) {
Sender sender = cache.findByType(type);
if(sender == null) {
sender = factory.createSender(type);
cache.addSenderForType(sender, type);
}
return sender;
}