一 概述 1.什麼是觀察者模式? 將一個對象視作被觀察者,當它發出某種行為或者發生某種變化時,通知所有依賴它的對象(觀察者),這種設計模式叫做觀察者設計模式。 2.觀察者設計模式的用途 用於處理一對多的依賴關係,當一個對象的狀態發生改變時,通知所有依賴於它的對象,這些對象收到通知以後採取相應的處理措 ...
一 概述
1.什麼是觀察者模式?
將一個對象視作被觀察者,當它發出某種行為或者發生某種變化時,通知所有依賴它的對象(觀察者),這種設計模式叫做觀察者設計模式。
2.觀察者設計模式的用途
用於處理一對多的依賴關係,當一個對象的狀態發生改變時,通知所有依賴於它的對象,這些對象收到通知以後採取相應的處理措施。
二 觀察者模式構成
- 被觀察者介面:包含添加觀察者、刪除觀察者、通知觀察者等操作。
- 被觀察者:實現了被觀察者介面,一個具體的被觀察者。
- 觀察者介面:處理被觀察者的通知。
- 觀察者:實現了觀察者介面,一個具體的觀察者。
三 實現Demo
1.被觀察者介面
package com.designmode.observer.demo01; public interface IObservable { void addObserver(IObserver observer); void removeObserver(IObserver observer); void notifyObservers(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 IObserver { void handleNotify(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("被觀察者發生變化"); } }