让课程互相交换信息的最佳方式是什么?

时间:2018-03-17 07:34:13

标签: java class object

所以假设我有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

我基本上想知道是否有更好的方法让这两个类在彼此之间交换数据/信息。我觉得我现在拥有的东西可能非常凌乱/邋and,可能不是很好的设计实践。对任何反馈/建议持开放态度。

由于

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

在我看来,现在,你没有任何“草率”,你只有2个具有各自属性的课程以及他们各自的吸气剂和制定者。

我给你的唯一建议是在构造函数中。我想你可以这样说,只是遵循标准:

- 我认为你应该在两个类中都有一个空的构造函数;这使您有机会创建类的实例而不发送参数。

- 在这种情况下,如果您想要实例化House,但不知道地址,那么这将有所帮助,因为您将在以后生成它。因此,您使用空构造函数创建House,然后使用setAddress()设置地址。

行:

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

public House() { //this is to be able to create an instance without sending any parameter.
address="";
dog=new Dog();
}

犬:

public Dog(String name) {
this.name;
house= new House();
}

public Dog() {
this.name="";
house=new House();
}

希望这会有所帮助。

问候,