菜鸡的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);
    }

}

           
        如果说现在不使用 以上的类或者接口能否实现同样的观察者模式?
            所有的对象保存在一个数组里面,,而后做一个判断,如果判断成功,则执行数组中特定的操作方法
            
    总结
        观察者设计模式主要是介绍这两个类的使用,本身的意义不大

posted @ 2019-01-02 21:26  SilentKiller  阅读(222)  评论(0编辑  收藏  举报