Observer 的定義:
???? 當被觀察的對象特定屬性改變時,就通知被它的觀察對象。
在這個模式中就兩個角色一個是被觀察者,一個是觀察者。當被觀察者做了某些改變時就通知它的觀察者。一個被觀察對象可以有N個觀察者。java.util.*包中已經實現了這種模式。請參考如下例子:
package com.pdw.pattern;
import java.util.*;
class Product extends Observable{//被觀察者必繼承于Observable
?
?private String pname;
?private float price;
?
?public String getPname() {
??return pname;
?}
?public void setPname(String pname) {
??this.pname = pname;
??setChanged();
??notifyObservers(pname);
?}
?public float getPrice() {
??return price;
?}
?public void setPrice(float price) {
??this.price = price;
??setChanged();
??notifyObservers(new Float(price));
?}
}
class NameObserver implements Observer{ //觀察者必須實現Observer接口
?public void update(Observable arg0, Object arg1) {
??if(arg1 instanceof String){
???System.out.println("產品名--->"+arg1);
??}
?}
?
}
class PriceObserver implements Observer{
?public void update(Observable arg0, Object arg1) {
??if(arg1 instanceof Float){
???System.out.println("產品價格是->"+arg1);
??}
?}
?
}
public class ObserverImpl {
?/**
? * @param args
? */
?public static void main(String[] args) {
??// TODO Auto-generated method stub
??Product p=new Product();
??p.setPname("電腦");
??p.setPrice(Float.valueOf("5632.6"));
??NameObserver no=new NameObserver();
??PriceObserver po=new PriceObserver();
??p.addObserver(no);
??p.addObserver(po);
??p.setPname("筆記本電腦");
??p.setPrice(Float.valueOf("9635.5"));
?}
}