菜鸡的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类的常用方法全部记下来,包括方法名称,参数作用以及类型 一个成熟的编程语言,除了它的语法非常完善之外,那么也需要提供有大量的开发类库 ...
随机推荐
- 3-等待线程终止的join方法
等待线程终止的join方法 在项目实践中经常会遇到一个场景,就是需要等待某几件事完成之后才能继续往下执行,比如线程加载资源等等. package com.heiye.learn1; public cl ...
- Geostatistical Analyst Tools(Geostatistical Analyst 工具)
Geostatistical Analyst 工具 1.使用地统计图层 # Process: GA 图层至格网 arcpy.GALayerToGrid_ga("", 输出表面栅格, ...
- 题解 [CTSC2006]歌唱王国
题目传送门 Desctiption 见题面. Solution 人类智慧... 考虑这样一个赌博游戏,现在有一个猴子,它随机从 \(1\sim n\) 中选一个打出来.现在有若干个赌徒,他们一开始都有 ...
- 洛谷5038 [SCOI2012]奇怪的游戏(二分+网络流+判断奇偶)
寒假的时候就听过这个题.但是一直没有写. qwq 首先,我们发现题目中的图是个网格图,然后每次可以将相邻两个格子加一. 很容易就想到是黑白染色.那么每次操作,就相当于同时操作一个白点,一个黑点. 我们 ...
- js--typeof 和 instanceof 判断数据类型的区别及开发中的使用
前言 日常的开发中,我们经常会遇到判断一个变量的数据类型或者该变量是否为空值的情况,你是如何去选择判断类型的操作符的?本文来总结记录一下我们开发人员必须掌握的关于 typeof 和 instanceo ...
- 分布式表示(Distributed Representation)
NLP模型笔记 - 分布式表示 ziuno 2020-03-08 19:52:50 410 收藏 2 分类专栏: NLP 模型 笔记 文章标签: nlp 最后发布:2020-03-08 19:52:5 ...
- pycharm 服务器连接及一些问题解决
主要介绍一下如何使用pycharm连接服务器并在服务器上炼丹,并对遇到的一个小问题进行说明. 目录 1,SSH连接 2,linux常用命令 3,配置anaconda 4,运行代码 5,一个常见错误 1 ...
- LeetCode:回溯算法
回溯算法 这部分主要是学习了 labuladong 公众号中对于回溯算法的讲解 刷了些 leetcode 题,在此做一些记录,不然没几天就忘光光了 总结 概述 回溯是 DFS 中的一种技巧.回溯法采用 ...
- VS2015+OpenCV+Qt
VS2015+OpenCV+Qt 01.OpenCV 下载 进入官网链接: https://opencv.org,下载所需要的版本: 下载完成后直接双击,选择解压路径,解压到响应的文件夹中: 若之后需 ...
- STM32 学习笔记之中断应用概览--以f103为例
异常类型 F103 在内核水平上搭载了一个异常响应系统, 支持为数众多的系统异常和外部中断.其中系统异常有8 个(如果把Reset 和HardFault 也算上的话就是10 个),外部中断有60个.除 ...