java - 许多类都使用一个对象,但对它有不同的看法

标签 java design-patterns interface readonly


抱歉,我想不出一个更能 self 描述的标题。

在我正在开发的独立应用程序(这是一项大学作业)中,我面临着这个问题:
我的实体(或模型对象或业务对象等)只不过是 POJO。

自然有(将会有)许多类使用它们,但是其中一些类不应该被允许修改它们的值(例如使用它们的 setter);我们可以说我需要将一个对象传递给具有不同权限的不同类:对某些类是只读的,对允许修改对象状态的其他类是读写的。

一个示例是仅显示有关对象的信息的 GUI 窗口:我想确保此类完全不知道如何修改对象的状态。

我阅读了很多有一些相关问题的主题(只读接口(interface)、只读实现、防御副本等),但我没有找到适合我的情况的内容。

假设我想仅向特定类授予对对象的 setter 方法的访问权限,但我找不到实现此目的的方法。

我最初认为接口(interface)会很好(例如带有 getter 的 ReadOnlyObject 和带有 setter 的 WriteOnlyObject 以及实现这两者的 Object),但是问题是任何使用ReadOnlyObject的类都可以轻松访问WriteOnlyObject接口(interface)。 除此之外,我不相信仅使用 getter 或 setter 编写接口(interface)是一个好的做法。

请帮忙! @_@

最佳答案

OOP 就是遵守契约。如果一个方法的契约声明它不会修改一个对象,那么即使它可以修改它也不应该这样做——如果它修改了,那就是一个错误。将业务对象直接传递到 GUI 没有任何问题。

当然,您应该尽可能将类设计为不可变的,但大多数业务对象都不是不可变的,尝试解决这个问题会导致解决方案笨重。如果您仍然担心暴露 setter,最好的解决方案是创建一个包含原始值副本的不可变传输对象。

关于java - 许多类都使用一个对象,但对它有不同的看法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12025994/

相关文章:

java - 不使用 ORM 实现实体类之间的关系

Java接口(interface)作为引用类型?

java - 来自 ContributionManager 中 IActions 的表中的复选框

java - 接受用户输入和调用方法的设计模式

java - 如何将公共(public)日志记录添加到我的 build.sbt 文件中?

c++ - 这个 C++ setter/getter 模式破坏了什么?

delphi - 编译器对隐式接口(interface)变量的处理是否有记录?

linux - 模拟进入 Linux 接口(interface)的数据包

java - 突出显示用于 JTable 过滤的表单元格中的子字符串

java - 我的应用程序在请求权限时崩溃