观察者模式
时间:2019-08-28
本文章向大家介绍观察者模式,主要包括观察者模式使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
/**
* 抽象被观察者接口
*/
public interface Subject {
//注册观察者
public void registerObserver(Observer o);
//移除观察者
public void removeObserver(Observer o);
//通知
public void notifyObserver();
}
import java.util.ArrayList;
import java.util.List;
/**
* 被观察者
*/
public class ConcreteSubject implements Subject{
private List<Observer> list;
private String message;
public ConcreteSubject() {
list = new ArrayList<>();
}
@Override
public void registerObserver(Observer o) {
list.add(o);
}
@Override
public void removeObserver(Observer o) {
if (!list.isEmpty()){
list.remove(o);
}
}
@Override
public void notifyObserver() {
for (Observer ob : list) {
ob.update(message);
}
}
//发送消息
public void setInformation(String s){
this.message = s;
System.out.println("更新消息:"+s);
notifyObserver();//通知观察者
}
}
/**
* 抽象观察者
*/
public interface Observer {
public void update(String message);
}
/**
* 观察者
*/
public class ConcreteObserver implements Observer {
private String name;
private String message;
public ConcreteObserver(String name) {
this.name = name;
}
@Override
public void update(String message) {
this.message = message;
read();
}
private void read() {
System.out.println(name+"收到推送消息:"+message);
}
}
import com.mod.ConcreteObserver;
import com.mod.ConcreteSubject;
/**
* 测试
*/
public class ObserverTest {
public static void main(String[] args){
ConcreteSubject subject = new ConcreteSubject();
ConcreteObserver zs = new ConcreteObserver("zs");
ConcreteObserver ls = new ConcreteObserver("ls");
subject.registerObserver(zs);
subject.registerObserver(ls);
subject.setInformation("通知:中秋放假去月球");
subject.removeObserver(zs);
subject.setInformation("通知:中秋节活动取消");
//更新消息:通知:中秋放假去月球
//zs收到推送消息:通知:中秋放假去月球
//ls收到推送消息:通知:中秋放假去月球
//更新消息:通知:中秋节活动取消
//ls收到推送消息:通知:中秋节活动取消
}
}
原文地址:https://www.cnblogs.com/fly-book/p/11425105.html
- 当Java虚拟机遇上Linux Arena内存池
- Activiti学习——Activiti与Spring集成
- spring boot 发送邮件
- spark 2.0主要特性预览
- y叔的ChIP-seq数据分析大礼包
- springboot的Web开发-Web相关配置
- Centos7下yum安装配置nginx与php
- CentOS7安装MySQL
- 分布式系统唯一ID生成方案汇总
- 操作系统底层技术——CPU亲和性
- AngularJS例子 ng-repeat遍历输出 通过js的splice方法删除当前行
- mongoDB报错Cannot find module '../build/Release/bson'
- 计算机视觉处理三大任务:分类、定位和检测
- Windows下RabbitMQ安装及入门
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Pandas把dataframe或series转换成list的方法
- Django 构建模板form表单的两种方法
- 详解pandas.DataFrame.plot() 画图函数
- python中pandas库中DataFrame对行和列的操作使用方法示例
- PHP实现简易计算器功能
- DataFrame 数据合并实现(merge,join,concat)
- PHP ajax+jQuery 实现批量删除功能实例代码小结
- python对execl 处理操作代码
- Python手动或自动协程操作方法解析
- 什么是python的自省
- python Socket网络编程实现C/S模式和P2P
- keras 多任务多loss实例
- 什么是python的必选参数
- python进程与线程小结实例分析
- PHP集成环境XAMPP的安装与配置