gpt4 book ai didi

OOP:如何处理具有相互关系的对象?

转载 作者:行者123 更新时间:2023-12-04 12:43:04 26 4
gpt4 key购买 nike

假设有两个类通过某些关系相互关联。例如,Student维护 Class 的列表他拿走了,每个ClassStudent 的列表拿它。那我怕让Student直接能够修改其集合Class es,因为每次修改都必须跟一个类似的修改 Class的列表Student s,反之亦然。

一种解决方案是创建一个唯一目的是跟踪 Class 的类。 - Student关系,比如说Registrar .但是如果 Student 中的某些方法需要了解其Class列表,Student需要通过Registrar .这似乎很糟糕。看来Student不应访问 Registrar , 在这里它还可以访问其他 Student s。我可以想到一个解决方案,创建一个充当 Student 之间的中介的类和 Registrar ,显示 Student只是它需要知道的,但这似乎有点矫枉过正。另一种解决方案是从 Student 中删除任何需要访问其类并将其放入 Registrar 的方法或其他可以访问 Registrar 的类.

我问的原因是我正在用Java开发国际象棋游戏。我正在考虑 Piece-Cell 关系和 Piece-Player 关系。如果在上面的示例中,Student 不合适访问Registrar ,这里可以使用Piece吗?访问Board , 因为 Piece无论如何都需要环顾四周以确定移动是否有效?

在这种情况下,标准做法是什么?

最佳答案

如果关系可以改变——类应该尽可能地解耦,所以随着每个类创建一个接口(interface),不要在类之间引入绑定(bind)关系。
您可以使用封装类之间通信逻辑的中间服务/帮助程序来实现高级别的分离,因此在这种情况下,您不应该将一个类注入(inject)另一个类,即使两者都由接口(interface)抽象,基本上 StudentClass 一无所知, 和 ClassStudent 一无所知.我不确定这种复杂性在您的情况下是否有意义,但无论如何您都可以实现它。

这是您可能会发现有用的design pattern Mediator它可以封装两个解耦实体之间的交互逻辑,看一下。

With the mediator pattern, communication between objects is encapsulated with a mediator object. Objects no longer communicate directly with each other, but instead communicate through the mediator. This reduces the dependencies between communicating objects, thereby lowering the coupling.

关于OOP:如何处理具有相互关系的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7049546/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com