博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
观察者模式回顾
阅读量:2236 次
发布时间:2019-05-09

本文共 1545 字,大约阅读时间需要 5 分钟。

今天回顾了下观察者模式,网上有简单的,也有复杂的,但是万变不离其宗。

观察者模式有两个角色:发布者(Subject)和订阅者(Observer),发布者拥有订阅者的一个列表,当发布者需要通知订阅者时,遍历列表中的订阅者,逐一调用事件通知给每一个订阅者,这样就完成了观察者模式。

1.发布者

import java.util.ArrayList;import java.util.List;public class Subject {		//list of observer	private List
list = new ArrayList
(); public void AddObserver(Observer observer){ System.out.println("add observer wiht name: " + observer.GetName()); list.add(observer); } public void RemoveObserver(Observer observer){ System.out.println("remove observer wiht name: " + observer.GetName()); list.remove(observer); } public void NotifyAllObserver(String message){ for(Observer observer : list){ observer.Update(message); } }}
2.订阅者

public class Observer {		private String name;		public Observer(String name){		this.name = name;	}		public String GetName(){		return this.name;	}		public void Update(String message){		System.out.println(message);	}}
3.测试

public class Hello {	/**	 * @param args	 */	public static void main(String[] args) {		// TODO Auto-generated method stub		Subject subject = new Subject();				Observer observer1 = new Observer("admin1");		Observer observer2 = new Observer("admin2");		Observer observer3 = new Observer("admin2");				subject.AddObserver(observer1);		subject.AddObserver(observer2);		subject.AddObserver(observer3);				subject.NotifyAllObserver("Hello");	}}
4.输出

add observer wiht name: admin1add observer wiht name: admin2add observer wiht name: admin2HelloHelloHello
总结:

可以在观察者和订阅者的基础上抽提出抽象类,然后发布的事件也可以抽提出接口,从而演化出更为复杂的观察者模式。

转载地址:http://ylsbb.baihongyu.com/

你可能感兴趣的文章
散落人间知识点记录one
查看>>
Leetcode C++ 随手刷 547.朋友圈
查看>>
手抄笔记:深入理解linux内核-1
查看>>
内存堆与栈
查看>>
Leetcode C++《每日一题》20200621 124.二叉树的最大路径和
查看>>
Leetcode C++《每日一题》20200622 面试题 16.18. 模式匹配
查看>>
Leetcode C++《每日一题》20200625 139. 单词拆分
查看>>
Leetcode C++《每日一题》20200626 338. 比特位计数
查看>>
Leetcode C++ 《拓扑排序-1》20200626 207.课程表
查看>>
Go语言学习Part1:包、变量和函数
查看>>
Go语言学习Part2:流程控制语句:for、if、else、switch 和 defer
查看>>
Go语言学习Part3:struct、slice和映射
查看>>
Go语言学习Part4-1:方法和接口
查看>>
Leetcode Go 《精选TOP面试题》20200628 69.x的平方根
查看>>
leetcode 130. Surrounded Regions
查看>>
【Python】详解Python多线程Selenium跨浏览器测试
查看>>
Jmeter之参数化
查看>>
Shell 和Python的区别。
查看>>
【JMeter】1.9上考试jmeter测试调试
查看>>
【虫师】【selenium】参数化
查看>>