当前位置: 首页 > news >正文

java设计模式观察者模式吗_JAVA设计模式---观察者模式

观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有的依赖者都会收到通知并自动更新,提供了一种对象设计,让主题和观察者之间松耦合,实现代码如下:

1、主题部分:

定义主题接口:

public interface Subject {

/*增加观察者*/

public void addObserver(Observer Observer);

/*删除观察者*/

public void delObserver(Observer Observer);

/*通知所的观察者*/

public void notifyObserver();

/*自身的操作*/

public void operation();

}

主题实现:

public class SubSubject implements Subject{

private List observers;

private float temp;

private float humidity;

private float pressure;

public SubSubject() {

observers = new ArrayList();

}

@Override

public void addObserver(Observer Observer) {

observers.add(Observer);

}

@Override

public void delObserver(Observer Observer) {

int i = observers.indexOf(observers);

if(i>=0){

observers.remove(i);

}

}

@Override

public void notifyObserver() {

for(int i=0;i

Observer observer = observers.get(i);

observer.update(temp,humidity,pressure);

}

}

@Override

public void operation() {

notifyObserver();

}

public void setParameters(float temp,float humidity,float pressure){

this.temp = temp;

this.humidity = humidity;

this.pressure = pressure;

operation();

}

}

2、观察者部分:

定义观察者接口:

public interface Observer {

public void update(float temp,float humidity,float pressure);

}

定义展示元素接口:

public interface DisplayElement {

public void display();

}

观察者1实现:

public class Observer1 implements Observer,DisplayElement {

private float temp;

private float humidity;

private float pressure;

private SubSubject mySubject1;

/*保存对Subject的引用,以后如果想取消注册,可以用到*/

public Observer1(SubSubject mySubject1) {

this.mySubject1 = mySubject1;

mySubject1.addObserver(this);

}

@Override

public void update(float temp, float humidity, float pressure) {

this.temp = temp;

this.humidity = humidity;

this.pressure = pressure;

display();

}

@Override

public void display() {

System.out.println("Observer1: temp="+temp+",humidity="+humidity+",pressure="+pressure);

}

}

观察者二实现:

public class Observer2 implements Observer,DisplayElement {

private float temp;

private float humidity;

private float pressure;

private SubSubject mySubject1;

/*保存对Subject的引用,以后如果想取消注册,可以用到*/

public Observer2(SubSubject mySubject1) {

this.mySubject1 = mySubject1;

mySubject1.addObserver(this);

}

@Override

public void update(float temp, float humidity, float pressure) {

this.temp = temp;

this.humidity = humidity;

this.pressure = pressure;

display();

}

@Override

public void display() {

System.out.println("Observer2: temp="+temp+",humidity="+humidity+",pressure="+pressure);

}

}

3、测试:

测试类:

public class ObserverTest {

public static void main(String[] args) {

SubSubject sub = new SubSubject();

Observer1 observer1 = new Observer1(sub);

Observer2 observer2 = new Observer2(sub);

sub.setParameters(80,65,30.1f);

sub.setParameters(70,55,20.1f);

}

}

测试结果:

Observer1: temp=80.0,humidity=65.0,pressure=30.1

Observer2: temp=80.0,humidity=65.0,pressure=30.1

Observer1: temp=70.0,humidity=55.0,pressure=20.1

Observer2: temp=70.0,humidity=55.0,pressure=20.1

相关文章:

  • java 简易的资源池_资源池设计模式 (Resource Pool)和数据池的简单实现
  • java替代重定向_Java 重定向与管道
  • java五子棋聊天功能_Java基于享元模式实现五子棋游戏功能实例详解
  • bandpass filter java_带通滤波器设计(Bandpass filter design).doc
  • java的位桶是什么,hashmap中的存储桶究竟是什么?
  • 缴费java代码_基于jsp的物业管理缴费系统-JavaEE实现物业管理缴费系统 - java项目源码...
  • java实体类间的转换_java 实体类集合转换和实体类转换
  • mysql碎片整理 提速_MysqL碎片整理优化
  • 一张纸对折13次JAVA_一张纸最多折叠8次?她把纸折叠了13次后,发生了什么?
  • plsq卸载 删除注册表、_oracle安装及使用常见问题及解决方案
  • 陈伟伟java_java开发学习笔记之图书管理系统
  • java的list集合详解_【java集合】List详解
  • java bean 命名_fastjson(javabean命名)
  • php按钮控制css命令,php实现的CSS更新类实例
  • sigbus php,php-fpm里常用参数优化解析
  • 《剑指offer》分解让复杂问题更简单
  • CSS3 变换
  • JavaScript异步流程控制的前世今生
  • leetcode388. Longest Absolute File Path
  • Linux CTF 逆向入门
  • mockjs让前端开发独立于后端
  • Promise面试题,控制异步流程
  • python 学习笔记 - Queue Pipes,进程间通讯
  • supervisor 永不挂掉的进程 安装以及使用
  • 分享一份非常强势的Android面试题
  • 汉诺塔算法
  • 前端js -- this指向总结。
  • 如何设计一个微型分布式架构?
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 函数计算新功能-----支持C#函数
  • ​MySQL主从复制一致性检测
  • #NOIP 2014# day.2 T2 寻找道路
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • #每日一题合集#牛客JZ23-JZ33
  • $.ajax中的eval及dataType
  • (¥1011)-(一千零一拾一元整)输出
  • (13):Silverlight 2 数据与通信之WebRequest
  • (9)STL算法之逆转旋转
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (function(){})()的分步解析
  • (poj1.2.1)1970(筛选法模拟)
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • **python多态
  • 、写入Shellcode到注册表上线
  • .htaccess配置重写url引擎
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?
  • .net开发时的诡异问题,button的onclick事件无效
  • .net中应用SQL缓存(实例使用)
  • @reference注解_Dubbo配置参考手册之dubbo:reference
  • @RequestParam @RequestBody @PathVariable 等参数绑定注解详解
  • @我的前任是个极品 微博分析