开发支持类库 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. 15种Python片段去优化你的数据科学管道

    来源:15 Python Snippets to Optimize your Data Science Pipeline 翻译:RankFan 15种Python片段去优化你的数据科学管道 为什么片段 ...

  2. 启用 Spring-Cloud-OpenFeign 配置可刷新,项目无法启动,我 TM 人傻了(上)

    本篇文章涉及底层设计以及原理,以及问题定位,比较深入,篇幅较长,所以拆分成上下两篇: 上:问题简单描述以及 Spring Cloud RefreshScope 的原理 下:当前 spring-clou ...

  3. 改头换面为哪般,最像Android的Windows——Win11升级安装体验

    在过完了十一小长假之后,各位打工人.学僧党可期待的不仅仅是新一轮的工作,Windows11也在10月5日悄悄正式发布,正式版已经面向MSDN订阅用户开放下载. 作为微软金牌合作伙伴,本葡萄已在第一时间 ...

  4. Protocol handler start failed

    问题描述: 启动项目的时候出现的中文大体意思是:协议处理程序启动失败看着这个启动失败,下意识就想是不是端口占用了,结果换个端口还是不行,于是百度了一个办法 问题解决: 打开任务管理器,找到Java的后 ...

  5. VS2019中安装2017,2015

    VS2019中安装2017,2015

  6. Excel一对多查找

    很多人在Excel中用函数公式做查询的时候,都必然会遇到的一个大问题,那就是一对多的查找/查询公式应该怎么写?大多数人都是从VLOOKUP.INDEX+MATCH中入门的,纵然你把全部的多条件查找方法 ...

  7. python中常用的导包的方法和常用的库

    python中常用的导包的方法               导入包和包名的方法:1.import package.module 2.from package.module import  * 例一: ...

  8. 深入理解Java虚拟机之类加载机制篇

    概述 ​ 虚拟机把描述类的数据从 Class 文件加载到内存中,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,就是虚拟机的类加载机制. ​ 在Java语言里面,类型的 ...

  9. 【Java虚拟机9】类加载器之命名空间详解

    前言 前面介绍类加载器的时候,介绍了一下命名空间这个概念.今天就通过一个例子,来详细了解一下[类加载器的命名空间].然后通过这个例子,我们可以总结一下双亲委托模型的好处与优点. 例1(不删除class ...

  10. Java:HashMap类小记

    Java:HashMap类小记 对 Java 中的 HashMap类,做一个微不足道的小小小小记 概述 HashMap:存储数据采用的哈希表结构,元素的存取顺序不能保证一致.由于要保证键的唯一.不重复 ...