我有以下课程
public class A {
private int number;
public int getNumber(){
return number;
}
public void setNumber(int number){
this.number = number;
}
}
然后是B类,它具有A类对象的属性。
public class B {
private A member;
public A getMember() {
return member;
}
public void setMember(A member) {
this.member = member;
}
}
我想要做的是在A类中的整数被更改时通知B类。
我希望在不使用Observable和Observer的情况下拥有通知机制。有任何想法吗 ?除观察者模式外是否有合适的模式?
编辑:我不想再次使用观察者的原因是因为B类已经扩展了java.util.Observable,我的最终目标是让B类观察者知道
中的变化私人成员A;
答案 0 :(得分:0)
将您的类A声明为接口,并在B中返回此接口的内部委托实现(代理模式)。
像这样的东西
public interface A {
void setNumber(int n);
int getNumber();
}
public class B {
private A member;
private class AImpl implements A {
public void setNumber(int n) {
member.setNumber(n);
notifyB();
}
public int getNumber() {
int res = member.getNumber();
notifyB();
return res;
}
}
public A getMember() {
return new AImpl();
}
public void setMember(A member) {
this.member = member;
}
private void notifyB() {
// notification
}
}
替代方案您也可以使用类Proxy
,但接口是首选方法。
答案 1 :(得分:-1)
如果是合理的,你可以尝试使A类不可变。然后,当您更改A时,您真正要做的是构造一个新的不可变对象(如String)。然后,为了机会A,你必须使用B的set方法在你改变任何东西时用新的A代替A.
这个模式对于客户端来说有点难用,但它确实意味着会自动通知B类,因为你只能通过调用set方法来改变B中A的一部分。
你基本上只需要想象A是一个字符串,当你使用这个模式时,所以你创建一个新的字符串,然后调用set因为string是不可变的。