win7dw做asp购物网站,专业网站建设服务公司哪家好,ios开发者账号多少钱一年,iosapp开发工具写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用#xff0c;主要是下面的UML图可以起到大作用#xff0c;在你学习过一遍以后可能会遗忘#xff0c;忘记了不要紧#xff0c;只要看一眼UML图就能想起来了。同时也请大家多多指教。
观察者模式#xff08;Observ…写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用主要是下面的UML图可以起到大作用在你学习过一遍以后可能会遗忘忘记了不要紧只要看一眼UML图就能想起来了。同时也请大家多多指教。
观察者模式Observer又名发布-订阅模式publish-subscribe
是一种行为型模式。因为叫发布-订阅模式更容易理解所以下面说明时大多情况会使用发布-订阅这个名称。
目录
一、概述
1.1、直观的理解
1.2、主要角色
1.3、描述对象之间关系的UML图
1.4、适用场景
二、简单举例
2.1、对象之间的关系用UML图表示如下
2.2、Java代码如下 一、概述 1、观察者模式定义了一种一对多的依赖关系让多个观察者订阅者对象同时监听某一个主题发布者对象。这个主题发布者对象在状态发生变化时会通知所有观察者订阅者对象使它们能够自动更新自己。1.1、直观的理解 注关于发布者何时给订阅者通知更新这个需要结合实际情况来考虑
1.2、主要角色 发布者目标主题发布者的抽象类或接口 发布者类订阅者观察者订阅者的抽象类或接口 订阅者类 1.3、描述对象之间关系的UML图 1.4、适用场景 一个抽象模型有两个方面其中一个方面依赖另一个方面。可以将它们封装独立出来对一个对象的改变需要同时改变其他对象一个对象必须通知其他对象而且其他对象并不是固定不变的 二、简单举例
假设 客户端 要让 发布者 设置自己的状态为hello再然后通知 张三 和 李四 这两个 订阅者 。例子简单就不再详细分析了。你可以把这当做一个模板然后灵活使用
2.1、对象之间的关系用UML图表示如下 2.2、Java代码如下
订阅者的抽象类
abstract class Subscriber {public abstract void update();//接收发布者的消息
}发布者的抽象类
abstract class Publisher {private ListSubscriber list; //链表public Publisher() {//初始化this.list new LinkedList();}public void attach(Subscriber subscriber) { //增加订阅者list.add(subscriber);}public void detach(Subscriber subscriber) {//删除订阅者list.remove(subscriber);}public void notifySubscriber() {//通知订阅者for (Subscriber subscriber : list) {subscriber.update();}}private String publisherState;//发布者状态public String getPublisherState() {//得到发布者状态return this.publisherState;}public void setPublisherState(String publisherState) {//设置发布者状态this.publisherState publisherState;}
}
具体的发布者A
public class ConcretePublisherA extends Publisher{//发布者的其它方法
}具体的订阅者1
public class ConcreteSubscriber1 extends Subscriber {private String name;//订阅者名称private Publisher publisher;//发布者public ConcreteSubscriber1(String name, Publisher publisher) {//初始化this.name name;this.publisher publisher;}Overridepublic void update() {//接收发布者的消息System.out.println(订阅者是 this.name 发布者的状态为 this.publisher.getPublisherState());}
}
主程序发起请求的类
public class Main {public static void main(String[] args) {Publisher publisher new ConcretePublisherA();Subscriber subscriber1 new ConcreteSubscriber1(张三, publisher);Subscriber subscriber2 new ConcreteSubscriber1(李四, publisher);publisher.attach(subscriber1);publisher.attach(subscriber2);publisher.setPublisherState(hello!);//通知订阅者publisher.notifySubscriber();}
}这里就不再举例了可以把上面的Java例子复制到你本地运行main函数试一下加深理解。这些代码都是我自己学习的时候根据一些教材手敲的不存在bug可以直接运行。
如果觉得本文还不错就请点个赞给作者一点鼓励吧如果有建议也请评论指教和讨论