1.定義觀察者和被觀察者接口
package subscribe;
//觀察者
public interface inObserver {
public void regist(inSubscribe subscribe);
public void unregist(inSubscribe subscribe);
public void setMsg(String msg);
public void notifyData();
public String getMsg();
}
//被觀察者
package subscribe;
public interface inSubscribe {
public void setObserver(inObserver in);
public void update();
//inObserver getObserver();
public void setMsg(String msg);
}
2.爲這兩個接口分別寫出實現類
//觀察者
package subscribe;
import java.util.ArrayList;
public class MyObserver implements inObserver {
ArrayList<inSubscribe>list;
private String msg;
boolean ischange;
/**
* 初始化list 用來存儲 被觀察者
*/
public MyObserver(){
list=new ArrayList<inSubscribe>();
}
/**
* 用來註冊被觀察者
*/
@Override
public void regist(inSubscribe subscribe) {
// TODO Auto-generated method stub
if(subscribe!=null&&!list.contains(subscribe)){
list.add(subscribe);
}
}
/**
* 取消註冊
*/
@Override
public void unregist(inSubscribe subscribe) {
// TODO Auto-generated method stub
if (subscribe!=null&&list.contains(subscribe)) {
list.remove(subscribe);
}
}
/**
* 簡單的實現信息的監聽
*/
@Override
public void setMsg(String msg) {
// TODO Auto-generated method stub
if (msg!=null&&msg!="") {
ischange= true;
this.msg=msg;
notifyData();
}
}
/**
* 用來更新 並提示唄觀察者
*/
@Override
public void notifyData() {
// TODO Auto-generated method stub
if (ischange) {
synchronized (this) {
for (inSubscribe inSubscribe : list) {
inSubscribe.update();
}
}
}
}
@Override
public String getMsg() {
// TODO Auto-generated method stub
return msg;
}
}
//實現被觀察者
package subscribe;
public class MySubscribe implements inSubscribe {
inObserver in;
/**
* 用來更新信息 在觀察者中調用
*/
@Override
public void update() {
// TODO Auto-generated method stub
if (in!=null) {
System.out.println(in.getMsg());
}
}
/**
* 綁定觀察者
*/
@Override
public void setObserver(inObserver in) {
// TODO Auto-generated method stub
this.in=in;
}
/**
* 輸入消息 實現所有被觀察者 監聽到此信息
*/
@Override
public void setMsg(String msg) {
// TODO Auto-generated method stub
if (in!=null) {
in.setMsg(msg);
}
}
}
3.測試
package subscribe;
public class TestDemo {
public static void main(String[] args) {
//創建觀察者
MyObserver ob=new MyObserver();
//創建被觀察者
MySubscribe my=new MySubscribe();
MySubscribe my1=new MySubscribe();
MySubscribe my2=new MySubscribe();
MySubscribe my3=new MySubscribe();
//綁定觀察者
my.setObserver(ob);
my1.setObserver(ob);
my2.setObserver(ob);
my3.setObserver(ob);
//註冊被觀察者
ob.regist(my);
ob.regist(my1);
ob.regist(my2);
ob.regist(my3);
//解綁被觀察者
ob.unregist(my3);
my.setMsg("HeLLo World");
}
}
4.輸出
HeLLo World
HeLLo World
HeLLo World
因爲解綁了一個 所有隻有三個監聽到
個人寫的小例子 希望你們能看懂 簡單的理解觀察者模式