怎样构造思路呢?设计Src和Dis两个类,Src中有一个被封装的属性,类型为int要求为非负值,每当通过特定的方法更改Src对象中的这个属性后,
Dis对象都能得到通知,并向Src发消息获得此属性值,怎样构造思路。
Src.java
public class Src{
private int x;
private Dis dis;
public void setDis(Dis dis){
this.dis=dis;
}
public void setX(int x){
this.x=x;
System.out.println("通知Dis x的值发生变化了");
this.dis.notice();
}
public int getX(){
return this.x;
}
}
Dis.java
public class Dis{
private int x;
private Src src;
public void setSrc(Src src){
this.src=src;
}
public void notice(){
this.x=this.src.getX();
System.out.println("收到通知 Src的值变了,最新的值为:"+this.x);
}
}
主类
public class a
{
public static void main(String[] args){
Src s=new Src();
Dis d=new Dis();
//这里实现双向绑定
s.setDis(d);
d.setSrc(s);
//改变Src x的值
s.setX(10);
}
}
看看能看懂吗,就是 Src 和 Dis 两个类绑定,就是 我中有你 你中有我
可以使用观察者模式来解决该题
Src.java
package base;
import java.util.ArrayList;
import java.util.List;
/**
* 被观察者
*
* @author 胡海龙
*
*/
public class Src {
private List<Observer> observers = new ArrayList<>();
private int num;
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
notifyAllObservers();
}
public void attach(Observer o) {
observers.add(o);
}
public void notifyAllObservers() {
for (Observer observer : observers) {
observer.update();
}
}
}
Observer.java
/**
* 观察者服务
*
* @author 胡海龙
*
*/
public abstract class Observer {
protected Src src;
public abstract void update();
}
Dis.java
/**
* 观察者
*
* @author 胡海龙
*
*/
public class Dis extends Observer {
public Dis(Src src) {
this.src = src;
this.src.attach(this);
}
@Override
public void update() {
System.out.println("Src is changed : " + src.getNum());
}
}
测试类Test.java
public class Test {
public static void main(String[] args) {
Src src = new Src();
new Dis(src);
src.setNum(10);
src.setNum(15);
}
}
运行结果:
我这里只用int类型来说明问题,非负这个可以自行在代码逻辑里加入