1. 程式人生 > >設計思想與模式之五觀察者模式

設計思想與模式之五觀察者模式

per -- 什麽 over out junit 測試類 rem second


一 概述

1.什麽是觀察者模式?

將一個對象視作被觀察者,當它發出某種行為或者發生某種變化時,通知所有依賴它的對象(觀察者),這種設計模式叫做觀察者設計模式。

2.觀察者設計模式的用途

用於處理一對多的依賴關系,當一個對象的狀態發生改變時,通知所有依賴於它的對象,這些對象收到通知以後采取相應的處理措施。

二 觀察者模式構成

  1. 被觀察者接口:包含添加觀察者、刪除觀察者、通知觀察者等操作。
  2. 被觀察者:實現了被觀察者接口,一個具體的被觀察者。
  3. 觀察者接口:處理被觀察者的通知。
  4. 觀察者:實現了觀察者接口,一個具體的觀察者。

三 實現Demo

1.被觀察者接口

package com.designmode.observer.demo01;

public interface IObserver {

    void handleNotify(String message);

}

2.被觀察者

package com.designmode.observer.demo01;

import java.util.ArrayList;
import java.util.List;

public class Performer implements IObservable {

    private List<IObserver> observers;

    
public Performer() { super(); observers = new ArrayList<IObserver>(); } @Override public void addObserver(IObserver observer) { // TODO Auto-generated method stub observers.add(observer); } @Override public void removeObserver(IObserver observer) {
// TODO Auto-generated method stub observers.remove(observer); } @Override public void notifyObservers(String message) { // TODO Auto-generated method stub for (IObserver observer : observers) { observer.handleNotify(message); } } }

3.觀察者接口

package com.designmode.observer.demo01;

public interface IObservable {

    void addObserver(IObserver observer);

    void removeObserver(IObserver observer);

    void notifyObservers(String message);

}

4.觀察者一

package com.designmode.observer.demo01;

public class FirstObserver implements IObserver {

    @Override
    public void handleNotify(String message) {
        // TODO Auto-generated method stub
        System.out.println("觀察者FirstObserver接收到消息----[" + message + "]----正在處理");
    }

}

5.觀察者二

package com.designmode.observer.demo01;

public class SecondObserver implements IObserver {

    @Override
    public void handleNotify(String message) {
        // TODO Auto-generated method stub
        System.out.println("觀察者SecondObserver接收到消息----[" + message + "]----正在處理");
    }

}

6.測試類

package com.designmode.observer.demo01;

import org.junit.Test;

public class ObserverTest {

    @Test
    public void test01() {
        /**
         * 創建觀察者
         */
        IObserver firstObserver = new FirstObserver();
        IObserver secondObserver = new SecondObserver();

        IObservable performer = new Performer();// 創建被觀察者

        /**
         * 添加觀察者
         */
        performer.addObserver(firstObserver);
        performer.addObserver(secondObserver);

        performer.notifyObservers("被觀察者發生變化");

    }

}

設計思想與模式之五觀察者模式