您的位置:首页 > 编程语言 > Java开发

Java 简单观察者模式Demo

2017-09-07 17:32 295 查看
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

因为解绑了一个 所有只有三个监听到

个人写的小例子 希望你们能看懂 简单的理解观察者模式
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: