开发支持类库 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笔记 开发支持类库的更多相关文章

  1. 菜鸡的Java笔记 第二十八 - java 包的定义

    包的主要作用以及定义    包的导入操作    系统常见的开发包    jar 程序命令        包的定义        在任何的操作系统之中都有一个统一的共识:同一个目录下不能够存在有相同的文 ...

  2. 菜鸡的Java笔记 第十三 String 类的两种实例化方法

    String 类的两种实例化方法 String 类的两种实例化方式的区别 String 类对象的比较 Stirng 类对象的使用分析 /*    1.String 类的两种实例化方式的区别       ...

  3. 菜鸡的Java笔记 - java 常用类库

    CommonClassLibrary 常用类库        定时调度            定时调度指的是每到一个时刻,都会自动的产生某些特定的操作形式                    con ...

  4. 菜鸡的Java笔记 java基础类库 BaseClassLibrary

    java基础类库 BaseClassLibrary        StringBuffer 类的特点        StringBuffer,StringBuilder,String 类之间的关系   ...

  5. 菜鸡的Java笔记 简单JAVA 类的开发原则以及具体实现

    /*  现在要求定义一个雇员信息类 在这个类之中包含有雇员编号 姓名 职位 基本工资 佣金等信息    对于此时给定要求实际上就是描述一类事物,而这样的程序类在在java之中可以将其称为简单java类 ...

  6. 菜鸡的Java笔记 第二十四 - java 接口的基本定义

    1.接口的基本定义以及使用形式        2.与接口有关的设计模式的初步认识        3.接口与抽象类的区别                 接口与抽象类相比,接口的使用几率是最高的,所有的 ...

  7. 菜鸡的Java笔记 第二十三 - java 抽象类的概念

    abstractClass 抽象类的概念        1.抽象类的基本定义        2.抽象类的使用原则                不会抽象类与接口,java = 没学           ...

  8. 菜鸡的Java笔记 第七 - java 数组

    数组的基本概念     笔试中经常出现的试题或是问题    1.1 概念        数组指的是一组相关变量的集合         如果用最原始的方式定义100个变量的话没问题但是这些变量的关联实在 ...

  9. 菜鸡的Java笔记 第十四 String 类常用方法

    /*String 类常用方法    将所有String类的常用方法全部记下来,包括方法名称,参数作用以及类型    一个成熟的编程语言,除了它的语法非常完善之外,那么也需要提供有大量的开发类库     ...

随机推荐

  1. 从产业链、架构和技术三个层面,看元宇宙与RPA的发展关系

    你可能还不知道,元宇宙也将带动RPA高速发展 一文读懂RPA如何赋能元宇宙,虚拟空间更需要RPA无处不在 三个层面,解读元宇宙如何利好RPA行业发展 从产业链.架构和技术三个层面,看元宇宙与RPA的发 ...

  2. 易华录 X ShardingSphere|葫芦 App 后台数据处理的逻辑捷径

    "ShardingSphere 大大简化了分库分表的开发和维护工作,对于业务的快速上线起到了非常大的支撑作用,保守估计 ShardingSphere 至少为我们节省了 4 个月的研发成本.& ...

  3. JS 开发中数组常用的方法

    大家有没有想过,js数组为什么会有这么多的方法,没错,就是为了不同场景下处理数据的需要,就像设计模式一样,都是为了能更好的处理当前场景的需要. 首先怎么创建一个数组呢, // 两种方式 // 1,构造 ...

  4. 2.3 Core Building Blocks 核心构件

    Core Building Blocks 核心构件 DDD mostly focuses on the Domain & Application Layers and ignores the ...

  5. 基于Apache Hudi 的CDC数据入湖

    作者:李少锋 文章目录: 一.CDC背景介绍 二.CDC数据入湖 三.Hudi核心设计 四.Hudi未来规划 1. CDC背景介绍 首先我们介绍什么是CDC?CDC的全称是Change data Ca ...

  6. 【UE4】GAMES101 图形学作业5:光线与物体相交(球、三角面)

    总览 在这部分的课程中,我们将专注于使用光线追踪来渲染图像.在光线追踪中最重要的操作之一就是找到光线与物体的交点.一旦找到光线与物体的交点,就可以执行着色并返回像素颜色. 在这次作业中,我们要实现两个 ...

  7. Noip模拟75 2021.10.12

    T1 如何优雅的送分 他说是送分题,我就刚,没刚出来,想到莫比乌斯容斥后就都没推出来 好吧还是不能被恶心的题目,挑衅的语言打乱做题节奏 于是这一场也就没了.... $F(i)$表示$i$的不同质因子集 ...

  8. NOIP模拟22

    T1d 一道垃圾贪心,写个堆优化或者桶就行 1 #include<bits/stdc++.h> 2 #define int long long 3 using namespace std; ...

  9. 攻防世界 杂项 6.pure_color

    图片隐写 工具 使用StegSolve一把梭 另一种解法 右击图片编辑,画图工具打开,属性设置黑白.

  10. linux shell 函数返回值问题(超过255)

    最近再写一个shell测试的时候出现问题,函数返回值异常 用shell计算斐波那契数列数列,写了一个shell函数,然后调用的,验证的时候我只随便计算了几个数(10以内),确认结果是正确的就提交了,后 ...