public class A {
private static A a = new A();
private int num1 = 0;
private int num2 = 0;
public int getNum1() {
return num1;
}
public void setNum1(int num1) {
this.num1 = num1;
}
public int getNum2() {
return num2;
}
public void setNum2(int num2) {
this.num2 = num2;
}
private A(){}
public static A getInstance(){
return a;
}
}
public class B {
private A a = A.getInstance();
//下面的构造方法可以解决我的问题
public B(){
setNum1();
setNum2();
}
public void setNum1(){
a.setNum1(2);
}
public void setNum2(){
a.setNum2(3);
}
public A getA() {
return a;
}
public void setA(A a) {
this.a = a;
}
}
public class C {
public static void main(String[] args) {
B b = new B();
A a = b.getA();
b.setNum1(); //行1
b.setNum2(); //行2
int num1 = a.getNum1();//行3
int num2 = a.getNum2();//行4
System.out.println(num1);
System.out.println(num2);
}
}
怎么设计可以省去行1 和行2,在行3和行4执行的时候分别调用行1和行2?
public class A {
private static A a = new A();
private B b;
private int num1 = 0;
private int num2 = 0;
public void setB(B b) {
this.b = b;
}
public int getNum1() {
b.setNum1();
return num1;
}
public void setNum1(int num1) {
this.num1 = num1;
}
public int getNum2() {
b.setNum2();
return num2;
}
public void setNum2(int num2) {
this.num2 = num2;
}
private A() {
}
public static A getInstance() {
return a;
}
}
public class B {
private A a = A.getInstance();
{
a.setB(this);
}
public void setNum1() {
a.setNum1(2);
}
public void setNum2() {
a.setNum2(3);
}
public A getA() {
return a;
}
public void setA(A a) {
this.a = a;
a.setB(this);
}
}
public class C {
public static void main(String[] args) {
B b = new B();
A a = b.getA();
int num1 = a.getNum1();// 行3
int num2 = a.getNum2();// 行4
System.out.println(num1);
System.out.println(num2);
}
}
最后不得不说,这个设计很不雅观
说的对。要有面向对象的思想就好了
get属性之前需要先set属性值的,否则得到的就是默认值0。
你可以先对a设置各个成员变量的值,行1,行2是必须的,但是可以不必用过B类来设置的。直接设置如下:
public static void main(String[] args) {
A a = new A();
a.setNum1(2); //行1
a.setNum2(3); //行2
int num1 = a.getNum1();//行3
int num2 = a.getNum2();//行4
System.out.println(num1);
System.out.println(num2);
}
直接创建A类的实例,先设置属性的值,然后再获取属性的值就可以了啊。