zoukankan      html  css  js  c++  java
  • [设计模式]观察者模式1(用JDK提供的API)

    观察者模式:

    被观察的类:

     1 package cn.itcast.obserdemo;
     2 
     3 import java.util.Observable;
     4 
     5 //House是被观察的,这里直接继承java中的类库(API)Observable类
     6 public class House extends Observable {
     7     //给House类声明一个price属性
     8     private float price;
     9     
    10     public House(float price){
    11         this.price = price ;
    12     }
    13     public String toString(){
    14         return "房子";
    15     }
    16     public float getPrice(){
    17         return price;
    18     }
    19     
    20     public void setPrice(float price){
    21         super.setChanged();//通知内容已经被修改了
    22         this.price = price;
    23         //一旦修改,则表示价格改变,那么价格改变之后,实际上应该立即通知所有的观察者
    24         super.notifyObservers(price);//通知所有的观察者已经改变.
    25     }
    26 }

    观察者类:

     1 package cn.itcast.obserdemo;
     2 
     3 import java.util.Observable;
     4 import java.util.Observer;
     5 
     6 //人是观察者,实现Observer接口
     7 public class Person implements Observer{
     8     //然后要实现Observer中的一个update()方法
     9     public void update(Observable o, Object arg) {
    10         //为了看下update中的各个参数代表的是什么意思,打印这两个参数
    11         System.out.println(o + "****被观察的操作有变更...."+arg);
    12     }
    13 }

    主测试类:

     1 package cn.itcast.obserdemo;
     2 
     3 public class TestObserver {
     4     public static void main(String[] args) {
     5         //new 一个被观察者House
     6         House h = new House(30000.0f);
     7         //new 三个观察者Person
     8         Person per1 = new Person();
     9         Person per2 = new Person();
    10         Person per3 = new Person();
    11         //被观察者和观察者之间建立"观察与被观察"关系
    12         h.addObserver(per1);//House对象h1增加一个观察者对象per1
    13         h.addObserver(per2);
    14         h.addObserver(per3);
    15         //让被观察者House对象house的发生变化
    16         h.setPrice(60000.0f);
    17     }
    18 }
    19     /*
    20     打印的内容
    21     房子****被观察的操作有变更....60000.0
    22     房子****被观察的操作有变更....60000.0
    23     房子****被观察的操作有变更....60000.0
    24     */
  • 相关阅读:
    Spring笔记——装配Bean
    Spring笔记——Spring之旅
    浅读Vue-Router源码记录
    稍微整理ES2020(es11)新东西
    前端实现批量打包下载文件
    CSS常见的三栏灵活布局实现方法
    不吹不黑,学完这篇,PDF导出就没有问题了
    不吹不黑,学完这篇,Word导出就没问题了
    不吹不黑,学完这篇,excel导出就没问题了
    Sass预编译 减法及除法计算问题
  • 原文地址:https://www.cnblogs.com/DreamDrive/p/4004529.html
Copyright © 2011-2022 走看看