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

Java设计模式之观察者模式

2017-08-10 21:41 465 查看

模式介绍

观察者模式定义了一些列对象之间的一对多关系。当一个对象改变状态,其他依赖者都会收到通知。观察者模式提供了一种对象设计,让主题和观察者之间松耦合。

应用场景

在生活中有很多观察者的模式应用,譬如我们用手机短信订阅移动公司的天气预报,我们和移动公司就是观察者和目标的关系,还有我们订阅微信公众号等等。

例子说明

下面写一个关于微信公众号订阅的demo来演示一下观察者模式。

uml图



观察者接口

/**
* 观察者接口
*/
public interface Observer {
/**
* 更新内容
* @param content
*/
public void update(String content);
}


观察者A

/**
* 观察者A
*/
public class A implements Observer{

@Override
public void update(String content) {
// TODO Auto-generated method stub
System.out.println("我是A,我接收到的信息:"+content);
}

}


观察者B

/**
* 观察者B
*/
public class B implements Observer{

@Override
public void update(String content) {
// TODO Auto-generated method stub
System.out.println("我是B,我接收到的信息:"+content);
}

}


平台接口

/**
* 平台接口
* @author S
*
*/
public interface Platform {
/**
* 注册观察者
* @param o
*/
public void register(Observer o);

/**
* 移除观察者
* @param o
*/
public void unregister(Observer o);

/**
* ֪ͨ通知观察者
* @param content
*/
public void notifyMessage(String content);

}


微信公众平台

/**
* 微信公众平台
* @author S
*
*/
public class WeChatPlatform implements Platform{

private List<Observer> list = new ArrayList<>();

@Override
public void register(Observer o) {
// TODO Auto-generated method stub
list.add(o);
}

@Override
public void unregister(Observer o) {
// TODO Auto-generated method stub
list.remove(o);
}

@Override
public void notifyMessage(String content) {
// TODO Auto-generated method stub
for(int i=0;i<list.size();i++){
list.get(i).update(content);
}
}

}


测试

/**
* 观察者模式
* @author S
*
*/
public class Main {
public static void main(String args[]){
WeChatPlatform platform = new WeChatPlatform();
A a = new A();
B b = new B();
//用户订阅平台,添加观察者
platform.register(a);
platform.register(b);
//发送消息给订阅者
platform.notifyMessage("上午天气很好");
//用户取消订阅平台,移除观察者
platform.unregister(a);
//发送消息给订阅者
platform.notifyMessage("下午要下雨");
}
}


打印结果

我是A,我接收到的信息:上午天气很好
我是B,我接收到的信息:上午天气很好
我是B,我接收到的信息:下午要下雨
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  设计模式