java - 消息传递对象设计的 OOP 建议

标签 java oop design-patterns architecture

我的场景是这样的:

当你按照消息类型将消息分派(dispatch)到不同的目的地时,我就有了一个消息系统。

这是我当前的设计:

Abstract class: MessageKindAbs

MessageKind1 extends MessageKindAbs  
MessageKind2 extends MessageKindAbs
MessageKind3 extends MessageKindAbs

等等..

现在MessageKind3是一种特殊的类型。它的目的是将 MessageKind1MessageKind2 的内容发送到日志进程。

因此,我在 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 将包含 MessageKind1MessageKind2 的实例,因为它们实现了 Logable

关于java - 消息传递对象设计的 OOP 建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16082661/

相关文章:

java - Vaadin 组件的 Selenium WebDriver 自动化

Python 设计 : OOP

design-patterns - 如何拥有特质的私有(private)部分?

javascript - Angular、React 和 Blaze(客户端 Meteor)之间的主要设计差异?

java - 暴露客户端 secret 是否会对 oauth 2 中的隐式授权类型构成威胁?

Java Transformer 如何忽略 namespace

java - jit 会优化分支太少的 switch 语句吗?

ios - 一个变量,一个类和两个相同的函数swift

c# - 如何强制所有实现在其构造函数中调用特定方法

c++ - 全局对象与单例模式