Java 簡單觀察者模式Demo

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


因爲解綁了一個 所有隻有三個監聽到


個人寫的小例子 希望你們能看懂 簡單的理解觀察者模式





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章