菜鸡的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类的常用方法全部记下来,包括方法名称,参数作用以及类型 一个成熟的编程语言,除了它的语法非常完善之外,那么也需要提供有大量的开发类库 ...
随机推荐
- Java 爬取 51job 数据 WebMagic实现
Java 爬取 51job 数据 一.项目Maven环境配置 相关依赖 jar 包配置 <parent> <groupId>org.springframework.boot&l ...
- dbus客户端使用指南
DBus是Linux使用的进程间通信机制,允许各个进程互相访问,而不需要为每个其他组件实现自定义代码.即使对于系统管理员来说,这也是一个相当深奥的主题,但它确实有助于解释linux的另一部分是如何工作 ...
- 题解 HDU 5279 YJC plays Minecraft
题目传送门 题目大意 给出\(n\)以及\(a_{1,2,...,n}\),表示有\(n\)个完全图,第\(i\)个完全图大小为\(a_i\),这些完全图之间第\(i\)个完全图的点\(a_i\)与\ ...
- git 更新与图形界面
git 软件更新:git update-git-for-windows 或者 git update gitk 是一个历史记录的图形化查看器. 使用:只需 cd 到一个 Git 仓库,然后键入:gitk ...
- K12教培从业者转型指南 换个赛道依然可以再创辉煌
随着"双减"政策的落地,属于K12教培机构的时代逐渐拉上帷幕,面对机会不再的K12教培行业,约70万机构和近千万的从业人员面临转型问题.压力之下,留下或离开?对广大K12教培机构从 ...
- WinForm RichTextBox 常用操作
1.设置不自动选择字词 RichTextBox在选择文字的时候,如果没有关闭自动选择字词功能,我们有时候选择的时候会自动将光标前后的字或者词连接在一起进行选择. RichTextBox有属性AutoW ...
- SpringBoot 整合 Thymeleaf & 如何使用后台模板快速搭建项目
如果你和我一样,是一名 Java 道路上的编程男孩,其实我不太建议你花时间学 Thymeleaf,当然他的思想还是值得借鉴的.但是他的本质在我看来就是 Jsp 技术的翻版(Jsp 现在用的真的很少很少 ...
- UltraSoft - Alpha - 测试报告
遇到的bug bug:在vue.config.js里配置proxy,并修改请求的url后仍无法连接到后端. 解决: url最后忘了'/',导致和后端不匹配,会有404.500等错误. 后端服务未打开或 ...
- 基于ImportBeanDefinitionRegistrar和FactoryBean动态注入Bean到Spring容器中
基于ImportBeanDefinitionRegistrar和FactoryBean动态注入Bean到Spring容器中 一.背景 二.实现方案 1.基于@ComponentScan注解实现 2.基 ...
- 状压dp学习笔记(紫例题集)
P3451旅游景点 Tourist Attractions 这个代码其实不算是正规题解的(因为我蒟蒻)是在我们的hzoj上内存限制324MIB情况下过掉的,而且经过研究感觉不太能用滚动数组,所以那这个 ...