【问题标题】:Sharing variables amongst extensions of an abstract class在抽象类的扩展之间共享变量
【发布时间】:2012-02-19 02:42:53
【问题描述】:

只是寻找一些关于我在一些消息处理代码中使用的结构的建议。

我正在处理的消息本质上是具有各种“段”的字符串。我编写了一些类来处理段(每个类一个段类型)。段阅读器是包含常用方法的 Abstract 类的扩展。最后,每个段阅读器都有公共和私有方法。现在,第一个版本的代码根据需要将消息传递给每个段读取器的构造函数:

SegmentReaderType1 r = new SegmentReader1(message)
String item = r.getSomethingInteresting()

这看起来很笨拙——所以我尝试了(使用静态方法):

String item = SegmentReaderType1.getSomethingInteresting(message)

这看起来更干净,但是一些读者内部很复杂,所以有很多(内部)消息传递(我不知道这是好还是坏?)。

作为替代方案,我一直想知道是否有一种机制可以让我将抽象父级的信息“分享”给读者?也许单例 MessageHolder 会是更好的选择?

代码有效,但我真的在努力开发更好的编码技术。任何帮助表示赞赏

【问题讨论】:

    标签: java design-patterns


    【解决方案1】:

    拥有一个静态字段和一个属性是您的最佳选择。您不能将单例与 SegmentReaderType1 类一起使用,因为无法实例化抽象类。在我看来,仅仅为了传达信息而开设另一个课程,这太过分了。

    【讨论】:

    • 对于单例,我想更多的是将消息存储在 MessageHolder.getInstance().setMessage(message) 中,然后通过抽象类中的方法访问它: String message = getMessage( ) 只调用 MessageHolder.getInstance().getMessage()
    • 我猜抽象类中的静态字段会被类的所有扩展看到?
    • 是的。更好的是,将其设置为受保护的静态,因此只有同一个包和扩展中的类才能使用它。如果我是你,我不会制作 MessageHolder,它会让你的程序非常混乱。
    猜你喜欢
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-18
    • 1970-01-01
    • 2011-04-14
    • 1970-01-01
    相关资源
    最近更新 更多