設計模式 -- 觀察者模式

1,定義:java

Define a one-to-many dependency between objects so that when one object changes state,all its dependents are notified and updated automatically.(定義對象間一種一對多的關係,使得每當一個對象發生變化,全部依賴他的對象都會獲得通知)code

 

2,通用類圖server

 

3,例子對象

(1)接口

/**
   觀察者接口
**/
public interface Observe {
    public String doSometing();
}

/**
  第一個觀察者
**/
public class Observer implements Observe{
    public String doSometing() {
        return "i dont know";
    }
}

/**
  第二個觀察者
**/
public class Observer2 implements Observe{
    public String doSometing() {
        return "i dont know 2";
    }
}

/**
抽象主題角色
**/
public abstract class Subject {

    Vector<Observe> vector = new Vector<Observe>();
    
    public void addObserve(Observe observe){
        vector.add(observe);
    }

    public void remove(Observe observe){
        vector.remove(observe);
    }

    public void notifyObserve(){
        for(Observe observe:vector){
            System.out.println(observe.doSometing());
        }
    }
}


/**
主題實現
**/
public class Subjecter extends Subject{
    public void doingSomething(){
        super.notifyObserve();
    }
}

 

(2)jdk自帶rem

/**
觀察者
**/
public class Observe implements Observer{
    public void update(Observable o, Object object) {
        System.out.println("觀察者數量:"+o.countObservers()+ "我被通知到了" +
                "" + object.toString());
    }
}


/**
   被觀察者接口
**/
public interface Subject{
    public void doSomeThing();
}


/**
被觀察者實現類
**/
public class Subjecter extends Observable implements Subject{
    public void doSomeThing() {
        setChanged();
        super.notifyObservers("啊啊");
    }
}

/**
使用
**/
    public static void main(String[] args){
        Subjecter subject = new Subjecter();
        Observer observer = new Observe();
        subject.addObserver(observer);
        subject.doSomeThing();
    }

4,觀察者模式角色it

  1 抽象主題(Subject):它把全部觀察者對象的引用保存到一個彙集裏,每一個主題均可以有任何數量的觀察者。抽象主題提供一個接口,能夠增長和刪除觀察者對象。class

  2 具體主題(ConcreteSubject):將有關狀態存入具體觀察者對象;在具體主題內部狀態改變時,給全部登記過的觀察者發出通知。jdk

  3 抽象觀察者(Observer):爲全部的具體觀察者定義一個接口,在獲得主題通知時更新本身。object

  4 具體觀察者(ConcreteObserver):實現抽象觀察者角色所要求的更新接口,以便使自己的狀態與主題狀態協調。

相關文章
相關標籤/搜索