说到java观察者模式 简单点一个例子就是
被观测方通过提供注册接口,使得观测方能够通过注册使得自己实时掌握被观测方数据变化。
好了 接下来是代码
被观测目标的接口,继承这个类的目标天生自带 拉人 踢人技能。只有被邀请的人才能看
1.subject.ava
package observer;
import java.util.ArrayList;
import java.util.List;
public class subject {
protected List<Person> persons = new ArrayList<Person>();
public void uptargect(int mytargect){
for(Person per:persons){
per.update(mytargect);
}
}
public void registPerson(Person per){
persons.add(per);
}
public void removePerson(Person per){
persons.remove(per);
}
}
子类.一个自己属性变化的方法 用线程是嫌她运行太快0.0 让他一秒来一次
2.subjectA .java
package observer;
public class subjectA extends subject implements Runnable{
private int Mytargect;
@Override
public void run() {
// TODO Auto-generated method stub
while(true){
try {
Thread.currentThread().sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Mytargect+=1;
this.uptargect(Mytargect);
}
}
}
观察者(偷窥者0.0)的接口类 继承者自带 实时更新偷窥内容。。
3.
package observer;
public interface Personobj {
public void update(int targect);
}
观察者实现类
targect为观察到的结果,那么
package observer;
public class Person implements Personobj{
private int targect;
private String name;
Person(String name){
this.name=name;
}
Person(){}
public int getTargect() {
return targect;
}
public void setTargect(int targect) {
this.targect = targect;
}
@Override
public void update(int mytargect) {
// TODO Auto-generated method stub
this.targect=mytargect;
getinfo();
}
public void getinfo(){
System.out.println(name+":捕捉到目标数值:"+ targect);
}
}
测试
package observer;
/**
*
* 观察者模式
* 适用范围 游戏对战,广播程序 等等
*
* @author 944658413
*
*/
public class Test {
public static void main(String[] args) {
//被测目标
subjectA a = new subjectA();
//观察者
Person pA = new Person("小明");
Person pB = new Person("小花");
Person pC = new Person("小刚");
//被测目标加入观察者
a.registPerson(pA);
a.registPerson(pB);
a.registPerson(pC);
//被测目标启动运行
Thread t = new Thread(a);
t.start();
}
}