【问题标题】:Best way to have classes exchange information about each other?让班级相互交流信息的最佳方式是什么?
【发布时间】:2018-03-17 16:12:24
【问题描述】:

假设我有 2 个课程,HouseDog

我希望Dog 知道它所在的House,反之亦然。

我目前有这两个类设置:


房屋类:

public class House {

private String address;
private Dog dog;

public House(String address, Dog dog) {
    setAddress(address);
    setDog(dog);
    dog.setHouse(this);
}

public void setDog(Dog dog) {
    this.dog = dog;
}

public String getAddress() {
    return address;
}

public void setAddress(String address) {
    this.address = address;
}

public String getDog() {
    return dog.getName();
    }

}

狗类:

public class Dog {

private House house;
private String name;

public Dog(String name) {
    setName(name);
}

public void setHouse(House house) {
    this.house = house;
}

public String getHouse() {
    return house.getAddress();
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
    }

}

最后我有这个主类将它们联系在一起:

public class Main {

public static void main(String[] args) {

    Dog dog = new Dog("Alex");
    House house = new House("123 Main street", dog);

    System.out.println(dog.getName() + " resides in " + dog.getHouse());
    System.out.println(house.getAddress() + " has a dog named " + house.getDog());

    }

}

控制台输出:

Alex resides in 123 Main street
123 Main street has a dog named Alex

我基本上想知道是否有更好的方法让这两个类在彼此之间交换数据/信息。我觉得我现在所拥有的可能非常混乱/草率,并且可能不是好的设计实践。欢迎提供任何反馈/建议。

谢谢

【问题讨论】:

  • 你可以看看builder设计模式可能是
  • @benjaminc 构建器设计模式适用于:当您有复杂对象时,创建应该独立于组成它的部分,或者构建过程必须允许构建对象的不同表示。 (我直接从四人帮中提取了这个)书。这种情况与任何一个用例都不匹配。
  • 有趣....
  • 您的代码中存在循环依赖 + 来自构造函数,您正在传递 this,可能会发生当前构造函数是从另一个重载的构造函数或子类的构造函数调用的,因此所有不能设置状态。基于这两点,您可以一一搜索如何解决这些问题。如果你问这个问题,你就走在了正确的轨道上。根据这两点重构你的代码。

标签: java class object


【解决方案1】:

我认为您正在寻找的是this: Managing Bidirectional Associations in my Java Model 问题,因为它碰巧有指向其他有用的堆栈溢出答案的链接。

【讨论】:

    猜你喜欢
    • 2015-11-17
    • 1970-01-01
    • 1970-01-01
    • 2010-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多