JAVA设计模式之观察者模式
1、观察者设计模式模拟是一个非常有意思的设计模式,可以理解为一触即发。如果要想实现观察者的设计模式需要以下的两个程序结构:
观察者:java.util.Observer;
被观察者:java.util.Observable;
范例:实现观察者:
//这些是所有的观察者
class Person implements Observer {
@Override
public void update(Observable o, Object arg) {
//一旦你关注的事情发生了变化
if(o instanceof House) {
if(arg instanceof Double) {
System.out.println("房价上涨!新价格:" + arg);
}
}
}
}

2、实现被观察者:当房价上涨时通知观察者。
class House extends Observable {
private double 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;
}
}

3、在客户端注册观察者:
public class ObserverDesign {
public static void main(String[] args) {
Person personA = new Person();
Person personB = new Person();
Person personC = new Person();
//设置观察者
House house = new House(8000000);
house.addObserver(personC);
house.addObserver(personB);
house.addObserver(personA);
house.setPrice(9000000);
}
}

4、当房价上涨时执行main主方法观察者会收到通知:

5、当房价下降执行main主方法观察者不会收到通知:
package com.gwolf.design;
import java.util.Observable;
import java.util.Observer;
//这些是所有的观察者
class Person implements Observer {
@Override
public void update(Observable o, Object arg) {
//一旦你关注的事情发生了变化
if(o instanceof House) {
if(arg instanceof Double) {
System.out.println("房价上涨!新价格:" + arg);
}
}
}
}
//被观察者
class House extends Observable {
private double 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;
}
}
public class ObserverDesign {
public static void main(String[] args) {
Person personA = new Person();
Person personB = new Person();
Person personC = new Person();
//设置观察者
House house = new House(8000000);
house.addObserver(personC);
house.addObserver(personB);
house.addObserver(personA);
house.setPrice(7000000);
}
}

6、执行main主方法,我们将看到控制台不会有任何输出。
