作者H45 (!H45)
看板java
标题Re: [问题] 建构子的引数可以是物件吗?
时间Fri Dec 29 18:32:01 2006
※ 引述《calais007 (浅水中)》之铭言:
: ※ 引述《tzuyy (..)》之铭言:
: : 小弟在上一行先宣告Department z = new Department();就可以编译了。
: : 谢谢各位大大的帮忙。但是我小弟又延生出另一个新的问题,
: : 如果x和z物件互相参考的话怎麽办?orz....
: : 在MainClass.java这样写:
: : public class MainClass {
: : public static void main(String[] args) {
: : Department z = new Department(x);
: : Student x = new Student(z);
: : }
: : }
: : 在Student.java这样写:
: : public class Student {
: : private Department major;
: : public Student(Department m){
: : this.setDepartment(m);
: : }
: : public Department getDepartment(){
: : return major;
: : }
: : public void setDepartment(Department m){
: : major = m;
: : }
: : }
: : 在Department.java这样写:
: : public class Department {
: : private Student studentname;
: : public Department(Student s){
: : this.setDepartment(s);
: : }
: : public Student getDepartment(){
: : return studentname;
: : }
: : public void setDepartment(Student s){
: : studentname = s;
: : }
: : }
: : 小弟想到的方法是这样子的,
: : 在Student类别先增一个建构子,
: : public Student(){};
: : 然後在MainClass类别先宣告一个x物件,使z可以顺利建立,
: : 然後再让x的major属性参考到z物件。
: : public class Student {
: : private Department major;
: : public Student(){};
: : public Student(Department m){
: : this.setDepartment(m);
: : }
: : public Department getDepartment(){
: : return major;
: : }
: : public void setDepartment(Department m){
: : major = m;
: : }
: : }
: : public class MainClass {
: : public static void main(String[] args) {
: : Student x = new Student();
: : Department z = new Department(x);
: : x.setDepartment(z);
: : }
: : }
: : 想请问各位大大有其它的方法吗?谢谢。
: 互相要使用对方的Reference我不建议这样丢
: 丢到後来会不知道那个引数是从那丢来的
: 我建议采用Mediator Design Pattern来做
: http://www.patterndepot.com/put/8/Behavioral.html
GUI的程式设计中,一个事件伴随着状态的改变,要使这些component
了解目前的状态来改变另一个component往往需要传递大量的referrence
这个时候使用Mediator Design Pattern来做是好的
但是原问题并没有这麽复杂
只是 A 决定 B,B 又决定 A 这样的 symmetric dependency 而已
所以并不需要使用Mediator Design Pattern
我认为比较好的解法是
public class Student {
public Student() {}
public void setDepartment(Department d) { this.d = d; }
private Department d;
}
public class Department {
public Department() {}
public void setStudent(Student s) { this.s = s; }
private Student s;
}
public class Main {
public static void main(String args[]) {
Student s = new Student();
Department d = new Department();
s.setDepartment(d);
d.setStudent(s);
}
}
如果语法有错的话,请恕我目前无法使用编译器
若有更好的解决方法,还望板友能不吝指教
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.115.205.85