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
因为解绑了一个 所有只有三个监听到
个人写的小例子 希望你们能看懂 简单的理解观察者模式
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
因为解绑了一个 所有只有三个监听到
个人写的小例子 希望你们能看懂 简单的理解观察者模式
相关文章推荐
- 观察者模式。简单demo
- Android观察者模式的简单实现demo
- Java设计模式之观察者模式的应用--简单的事件通知工具
- Android_观察者模式简单Demo
- java观察者模式小demo
- 在Java中简单的使用观察者模式
- 设计模式之观察者模式(有源码简单实现及java函数简单实现)
- 设计模式-java实现 简单易理解Demo[待续]
- Android观察者模式的简单实现demo
- JAVA设计模式-观察者模式简单例子
- Java设计模式之观察者模式简单介绍
- Java 语言使用 Observer/Observable 实现简单的观察者模式
- Java-马士兵设计模式学习笔记-观察者模式-AWT简单例子
- Java 语言使用 Observer/Observable 实现简单的观察者模式
- Android---观察者模式的简单实现demo
- 最简单的观察者模式纯JAVA实现
- 简单JAVA观察者模式监测文件是否改动
- java观察者模式的简单案例
- Java 观察者模式 简单例子
- webservice delphi客户端 java服务器端 传输简单和复杂对象 小demo