我的场景是这样的:
当你按照消息类型将消息分派(dispatch)到不同的目的地时,我就有了一个消息系统。
这是我当前的设计:
Abstract class: MessageKindAbs
MessageKind1 extends MessageKindAbs
MessageKind2 extends MessageKindAbs
MessageKind3 extends MessageKindAbs
等等..
现在MessageKind3
是一种特殊的类型。它的目的是将 MessageKind1
或 MessageKind2
的内容发送到日志进程。
因此,我在 MessageKind3
内创建了 MessageKind3Items
列表:
list<MessageKind3Item> MessageKind3ItemList...
MessageKind3Item
包含用于记录目的的 MessageKind1
/MessageKind2
信息。
基本上,每个 MessageKind3Item
还包含 MessageKindAbs
类型。
但这对我来说毫无意义。
例如:发送一条消息到DB队列并记录MessageKind1
保存和MessageKind2
保存的信息。
所以我的 OOP 设计变得有点复杂。
有人可以帮我找到这里的路吗?
我可以在 MessageKind3Item
内部创建另一个 MessageKindAbs
实例类型,但我不确定它是否有意义。
谢谢, 射线,
最佳答案
让所有可以发送到日志进程的消息都实现一个接口(interface)。例如:
public interface Logable {
void logTo(PrintWriter write);
}
比MessageKind3
只需要维护一个Logable
列表。请注意,使用 PrintWriter
只是一个建议。您可能需要更复杂的参数类型,以便在接口(interface)实现中更轻松地进行日志记录。
MessageKind3 将如下所示:
public class MessageKind3 extends MessageKindAbs {
private List<Logable> logables;
//...
public List<Logable> getLogables() {
return Collections.unmodifiableList(logables);
}
}
并且 logables
将包含 MessageKind1
或 MessageKind2
的实例,因为它们实现了 Logable
。
关于java - 消息传递对象设计的 OOP 建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16082661/