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     */
  • 相关阅读:
    Infopath Notify 弹出提示信息
    window.showModalDialog 返回值
    【转】获得正文内容中的所有img标签的图片路径
    Json Datable Convert
    Sharepoint 列表 附件 小功能
    Surgey 权限更改
    SQL 触发器用于IP记录转换
    Caml语句 查询分配给当前用户及当前组
    jquery 1.3.2 auto referenced when new web application in VSTS2010(DEV10)
    TFS diff/merge configuration
  • 原文地址:https://www.cnblogs.com/DreamDrive/p/4004529.html
Copyright © 2011-2022 走看看