菜鸡的Java笔记 开发支持类库
开发支持类库 SupportClassLibrary
观察者设计模式的支持类库
content (内容)
什么是观察者设计模式呢?
这种观察者设计模式本身是i可以利用多线程实现的,不过这样的实现模式i会比较麻烦,所以在java中专门提供了于观察者有关的实现类
java.util.Observable Observer
首先来观察 Observer 接口定义
public interface Observer{
public void update(Observable o,Object arg); // Object :肉包子
}
如果要想实现具体的观察者操作则还需要使用 Observable 类,这个类中定义有如下的方法
| NO | 名称 | 类型 | 简介 |
| 1 | public void addObserver(Observer o) | 普通 | 追加观察者 |
| 2 | public void deleteObserver(Observer o) | 普通 | 删除观察者 |
| 3 | public void notifyObservers() | 普通 | 激活观察者 |
| 4 | protected void setChanged() | 普通 | 被观察的操作发生了改变 |
下面模拟一个房子的价格的观察者操作
import java.util.Observable;
class House extends Observable{ // 被观察者
private doublle price; // 房子价格
public House(double price){
this.price = price;
}
public void setPrice(double price){
if(price > this.price){ // 房价上涨有人关注
super.setChanged(); // 已经能够发生改变
super.notifyObservers(price); // 通知所有的观察者已经发生了改变
}
this.price = price;
}
}
于是在准备出观察者,观察者要关注着被观察者的变化
package cn.mysterious.study3; import java.util.Observable;
import java.util.Observer; class House extends Observable{ // 被观察者
private doublle price; // 房子价格
public House(double price){
this.price = price;
}
public void setPrice(double price){
if(price > this.price){ // 房价上涨有人关注
super.setChanged(); // 已经能够发生改变
super.notifyObservers(price); // 通知所有的观察者已经发生了改变
}
this.price = price;
}
}
class HousePriceObserver implements Observer{ // 房子价格的观察者
private String name;
public HousePriceObserver(String name) {
// TODO Auto-generated constructor stub
this.name = name;
}
@Override
public void update(Observable obj, Object arg) {
if (obj instanceof House) { // 房子的信息发生了改变
if (arg instanceof House) {
double newPrice = (Double) arg;
System.out.println("上涨" + newPrice);
}
}
}
}
public class SupportClassLibrary { public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
House house = new House(3000000.0); // 被观察者
HousePriceObserver hop1 = new HousePriceObserver("1");
HousePriceObserver hop2 = new HousePriceObserver("2");
HousePriceObserver hop3 = new HousePriceObserver("3");
house.addObserver(hop1);
house.addObserver(hop2);
house.addObserver(hop3);
house.setPrice(5000000.0);
} }
如果说现在不使用 以上的类或者接口能否实现同样的观察者模式?
所有的对象保存在一个数组里面,,而后做一个判断,如果判断成功,则执行数组中特定的操作方法
总结
观察者设计模式主要是介绍这两个类的使用,本身的意义不大
菜鸡的Java笔记 开发支持类库的更多相关文章
- 菜鸡的Java笔记 第二十八 - java 包的定义
包的主要作用以及定义 包的导入操作 系统常见的开发包 jar 程序命令 包的定义 在任何的操作系统之中都有一个统一的共识:同一个目录下不能够存在有相同的文 ...
- 菜鸡的Java笔记 第十三 String 类的两种实例化方法
String 类的两种实例化方法 String 类的两种实例化方式的区别 String 类对象的比较 Stirng 类对象的使用分析 /* 1.String 类的两种实例化方式的区别 ...
- 菜鸡的Java笔记 - java 常用类库
CommonClassLibrary 常用类库 定时调度 定时调度指的是每到一个时刻,都会自动的产生某些特定的操作形式 con ...
- 菜鸡的Java笔记 java基础类库 BaseClassLibrary
java基础类库 BaseClassLibrary StringBuffer 类的特点 StringBuffer,StringBuilder,String 类之间的关系 ...
- 菜鸡的Java笔记 简单JAVA 类的开发原则以及具体实现
/* 现在要求定义一个雇员信息类 在这个类之中包含有雇员编号 姓名 职位 基本工资 佣金等信息 对于此时给定要求实际上就是描述一类事物,而这样的程序类在在java之中可以将其称为简单java类 ...
- 菜鸡的Java笔记 第二十四 - java 接口的基本定义
1.接口的基本定义以及使用形式 2.与接口有关的设计模式的初步认识 3.接口与抽象类的区别 接口与抽象类相比,接口的使用几率是最高的,所有的 ...
- 菜鸡的Java笔记 第二十三 - java 抽象类的概念
abstractClass 抽象类的概念 1.抽象类的基本定义 2.抽象类的使用原则 不会抽象类与接口,java = 没学 ...
- 菜鸡的Java笔记 第七 - java 数组
数组的基本概念 笔试中经常出现的试题或是问题 1.1 概念 数组指的是一组相关变量的集合 如果用最原始的方式定义100个变量的话没问题但是这些变量的关联实在 ...
- 菜鸡的Java笔记 第十四 String 类常用方法
/*String 类常用方法 将所有String类的常用方法全部记下来,包括方法名称,参数作用以及类型 一个成熟的编程语言,除了它的语法非常完善之外,那么也需要提供有大量的开发类库 ...
随机推荐
- Mysql集群搭建(多实例、主从)
1 MySQL多实例 一 .MySQL多实例介绍 1.什么是MySQL多实例 MySQL多实例就是在一台机器上开启多个不同的服务端口(如:3306,3307,3308),运行多个MySQL服务进程,通 ...
- Docker-Compose的一些常用命令
一.Docker-Compose简介 1.Docker-Compose简介 Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排. Docker-Co ...
- torch的下载及安装
Pytorch官网:https://pytorch.org/ 安装的时候如果选择在官网上下载安装的话下载会很慢,试过梯子也是很慢,此处提供一种快速安装的方法. 1.由于我是window系统,我选择了国 ...
- 极简SpringBoot指南-Chapter04-基于SpringBoot的书籍管理Web服务
仓库地址 w4ngzhen/springboot-simple-guide: This is a project that guides SpringBoot users to get started ...
- VulnHub 实战靶场Breach-1.0
相比于CTF题目,Vulnhub的靶场更贴近于实际一些,而且更加综合考察了知识.在这里记录以下打这个靶场的过程和心得. 测试环境 Kali linux IP:192.168.110.128 Breac ...
- 题解 GRE Words Revenge
题目传送门 题目大意 给出 \(m\) 次操作,分别为以下两种操作: 学习一个单词 给出一个段落,查询里面有多少个学过的单词.注意,如果学习过 \(\text{ab,bc}\) ,当前查询段落为 \( ...
- [源码解析]PyTorch如何实现前向传播(2) --- 基础类(下)
[源码解析]PyTorch如何实现前向传播(2) --- 基础类(下) 目录 [源码解析]PyTorch如何实现前向传播(2) --- 基础类(下) 0x00 摘要 0x01 前文回顾 0x02 Te ...
- Java:并发笔记-07
Java:并发笔记-07 说明:这是看了 bilibili 上 黑马程序员 的课程 java并发编程 后做的笔记 6. 共享模型之不可变 本章内容 不可变类的使用 不可变类设计 无状态类设计 6.1 ...
- 6月6日 Scrum Meeting
日期:2021年6月6日 会议主要内容概述: 删除模板选择页面,画图页面新增模板选择 保存时后端判重 后端要新增数据分享url 主题色->lxd:画图教程->lsp:表格数据分析-> ...
- OO--第三单元规格化设计 博客作业
OO--第三单元规格化设计 博客作业 前言 第三单元,我们以JML为基础,先后完成了 PathContainer -> Graph -> RailwaySystem 这是一个递进的过程,代 ...