我是Java的新手,并且遇到了有关类之间通信的问题。说我下面有这个例子。
我收到了一个要发送给MyClass1中的setter方法的字符串(打印)
在MyClass1中,我更改了getterMethod和广告“ 1”中的字符串
我在主类中收到操纵后的字符串,并将其发送到MyClass2中的setter-method
在MyClass2中,我再次更改了字符串,并更改了广告“和2”,因此完整的字符串为“ print 1 and 2”
然后我通过MyClass2中的getter方法在主类中接收新字符串,并在main方法中打印结果
结果是“打印1和2”
这可以正常工作,但是在类之间有更好的通信方式。对我来说,通过主类课程似乎很漫长。是否可以在MyClass1和MyClass2之间直接通信而无需先经过主类?
所以我的问题是:我有更好的方法吗?
这是我的工作代码:
主类:
public class Testing1 {
public static void main(String[] args) {
String print = "Hello world";
MyClass1 m1 = new MyClass1();
MyClass2 m2 = new MyClass2();
m1.setPrint(print);
m2.setPrint(m1.getPrint());
System.out.println("m2 = " + m2.getClass2());
}
}
MyClass1:
public class MyClass1 {
private String print = "";
public MyClass1() {
}
public void setPrint(String print) {
this.print = print;
}
public String getPrint() {
String print2 = print+" " + 1;
return print2;
}
}
MyClass2:
public class MyClass2 {
private String print = "";
public MyClass2() {
}
public void setPrint(String print) {
this.print = print;
}
public String getClass2() {
String print2 = this.print + " and 2";
return print2;
}
}
最佳答案
好的OO设计的全部要点是:一些对象A应该可以访问完成其工作所需的其他对象。
含义;通常您的课程如下:
public class Foo {
private final Bar bar;
...
含义:任何Foo对象都有一个包含Bar对象的栏。并且该Foo对象可以用来执行Foo必须要做的事情。
因此,如果您希望MyClass1对MyClass2做某事,那么一个类应该具有该类型的字段;然后使用例如构造函数初始化该字段。
但是,另一方面:好的OO设计的另一个想法是,班级有特定的责任。您希望使课程尽可能“小”;含义:您仔细考虑要在课程中包含哪些字段。换句话说:您尝试创建小的但有用的“构建块”。然后,在更高层次上,您可以使用较小的构建基块来构成“更大”的对象。从这个意义上讲,您当前的实现(main创建几个对象;分别调用它们以实现某个目标)实际上是一个好方法。您会看到,最后要结束的事情是:一些大类负责“一切”!
最后:我知道我的回答是“相当笼统和抽象的”。但是您的示例代码也是如此。含义:为了学习如何创建真实的设计;最好是解决实际问题。您会发现,您发布的代码没有做“有用的”事情;因此,它的结构化并不重要。在某种程度上,手头上更具体的输入/任务总是更容易给出具体建议。