轻松掌握Java观察者模式
作者:断了联系 发布时间:2023-10-10 22:34:54
标签:Java,设计模式,观察者模式
定义:当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。
特点:
1、观察者和被观察者是抽象耦合的。
2、建立一套触发机制。
企业级开发和常用框架中的应用:Java自带观察者类,servlet中的filter,分布式的消息队列
实例:
public class Demo {
public static void main(String[] args) {
ActualSubject subject = new ActualSubject();
ObserverA o1 = new ObserverA();
ObserverA o2 = new ObserverA();
ObserverA o3 = new ObserverA();
//订阅消息
subject.addObserver(o1);
subject.addObserver(o2);
subject.addObserver(o3);
subject.setNews("今天天气真好");
}
}
/**
* 观察者接口
*/
interface Observer{
public void update(Subject subject);
}
/**
* 目标对象,广播对象
*/
class Subject{
private List<Observer> list = new ArrayList<>();
public void addObserver(Observer o){
list.add(o);
}
public void removeObserver(Observer o){
list.remove(o);
}
public void notifyAllObserver(){
for(Observer o:list){
o.update(this);
}
}
}
class ActualSubject extends Subject{
private String news;
public void setNews(String news) {
this.news = news;
System.out.println("我是广播,我发出了一个消息");
notifyAllObserver();
}
public String getNews() {
return news;
}
}
class ObserverA implements Observer{
private String news;
public void update(Subject subject) {
setNews(((ActualSubject)subject).getNews());
System.out.println("我是观察者,我接收到一个我订阅的广播发出的消息,接下来我要做出响应的操作");
System.out.println(getNews());
}
public String getNews() {
return news;
}
public void setNews(String news) {
this.news = news;
}
}
0
投稿
猜你喜欢
- 故事背景故事发生在几个星期前,自动化平台代码开放给整个测试团队以后,越来越多的同事开始探索平台代码。为了保障自动化测试相关的数据和沉淀能不被
- 在ibatis的xml文件里,我们去写sql语句,对应mapper类的方法,这些sql语句与控制台上没什么两样,但在有些功能上需要注意,如w
- 先看代码public class TestDemo1 { public static void main(String[] ar
- 这篇文章主要介绍了spring web.xml指定配置文件过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价
- 说明本项目采用 maven 结构,主要演示了 spring mvc + mybatis,controller 获取数据后以json 格式返回
- 单元测试是程序员对代码的自测,一般公司都会严格要求单元测试,这是对自己代码的负责,也是对代码的敬畏。一般单元测试都是测试Service层,下
- 具体解释请仔细看注释里已经讲解的很细致了,这里就不多废话了using UnityEngine;using System.Collection
- 1、购买或本地生成ssl证书要使用https,首先需要证书,获取证书的两种方式:1、自己通过keytool生成2、通过证书授权机构购买###
- 一般情况下,Redis Client端发出一个请求后,通常会阻塞并等待Redis服务端处理,Redis服务端处理完后请求命令后会将结果通过响
- 在进行持久层数据维护(新增或修改)的时候,我们通常需要记录一些非业务字段,比如:create_time、update_time、update
- 本文实例为大家分享了Java实现双向链表的具体代码,供大家参考,具体内容如下双向链表与单链表的对比:1、单向链表查找只能是一个方向,双向链表
- 1、数组数组的引用传递public class TestDemo1{public static void main(String args[
- 一、相关介绍Gradle是一个好用的构建工具 ,使用它的原因是:配置相关依赖代码量少,不会像maven一样xml过多 打包编译测试
- 前言Java泛型这个特性是从JDK 1.5才开始加入的,因此为了兼容之前的版本,Java泛型的实现采取了“伪泛型”的策略,即Java在语法上
- 一,Thread 的几个常见属性Thread 类是 JVM 用来管理线程的一个类,换句话说,每个线程都有一个唯一的 Thread 对象与之关
- 下面是20个非常有用的Java程序片段,希望能对你有用。1. 字符串有整型的相互转换String a = String.valueOf(2)
- 如下面代码以交灯为示例:public class Test { public static
- 在android开发中,有时候我们想获取手机的一些硬件信息,比如android手机的总内存和可用内存大小。这个该如何实现呢?通过读取文件&q
- 前言反射和注解在java中偏高级用法,一般在各种框架中被广泛应用,文章简单介绍下反射和注解的用法,希望对你的工作学习有一定帮助java注解什
- 会话会话:用户打开浏览器进行的一系列操作直至关闭浏览器的过程看作是一次会话HTTP协议是无状态的,不能实现跟踪对话。比如进入一个网站,每次操