java - 有没有什么方法可以设计我的 Java 代码,使这两个对象不引用自身?

标签 java design-patterns composition

设置

我的 Java 代码包含两个对象:Group 和 Person。每个组可以包含对多个人员的引用,但每个人员只能属于一个组。

每个人 Jersey 的颜色都源自其所在组的颜色。 (注意:如果他们不属于某个组,则他们的毛衣是灰色的。)

当我在屏幕上绘制人物时,我会吸收人物本身和颜色。

代码

public class Person {
    Color sweatshirtColor = Color.gray;
    Group belongsToGroup = null;

    public void setGroup(Group g) { belongsToGroup = g; }
}

public class Group {
    Color color = Color.red;
    List<Person> people = new ArrayList<Person>();
    // ... setters for adding and getting people
}

抽奖

public void draw(Person dudette, Color shirtColor) { //... }

问题 Group 和 Person 都互相引用 - 我担心其中一个可能会与另一个不同步。我的绘制代码必须修复(因为它是外部的),但是我在这个设计中做错了什么明显的事情吗?

编辑:还有一个注释 - 小组可以在整个计划中更改。一个人的组取决于他们的位置,因此他们会不断切换组。

最佳答案

您可以向每个类引入 setter,这将允许任一实体修改另一个实体及其自身,以便它们永远不会失去同步。例如

class Group {
    List<Person> people;
    void removePerson(Person p) {
        if(people.remove(p))
            p.removeFromGroup();
    }
}

class Person {
    Group grp;
    void removeFromGroup() {
        grp.removePerson(this);
        grp = null;
    }
}

您可以执行相同的操作来添加群组成员。

关于java - 有没有什么方法可以设计我的 Java 代码,使这两个对象不引用自身?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12202603/

相关文章:

java - 使用 java DocumentBuilder 从 xml feed 获取 rel ="alternate"href 值

java - Java中如何将10位电话号码解析为整数

c# - 反设计模式书

oop - Go 中是否存在脆弱的基类问题?

java - 在 Java 中存储和检索 copmosit 对象

java - 通过Android连接Openfire服务器

java - 在执行期间,Java 程序如何知道它使用了多少内存?

java - 编程模式 - 示例研究

c# - WinForms 中的 MVP 导航

java - 关于优先使用组合而不是继承方法,策略模式