菜鸡的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); } }
如果说现在不使用 以上的类或者接口能否实现同样的观察者模式?
所有的对象保存在一个数组里面,,而后做一个判断,如果判断成功,则执行数组中特定的操作方法
总结
观察者设计模式主要是介绍这两个类的使用,本身的意义不大
时刻告诉自己,自己是个菜鸡......