Java 設計模式之觀察者模式

來源:互聯網
上載者:User

標籤:java 觀察者模式

觀察者模式介紹:

觀察者模式(Observer)完美的將觀察者和被觀察的對象分離開。舉個例子,使用者介面可以作為一個觀察者,業務資料是被觀察者,使用者介面觀察業務資料的變化,探索資料變化後,就顯示在介面上。物件導向設計的一個原則是:系統中的每個類將重點放在某一個功能上,而不是其他方面。一個對象只做一件事情,並且將他做好。觀察者模式在模組之間劃定了清晰的界限,提高了應用程式的可維護性和重用性。

觀察者設計模式定義了對象間的一種一對多的依賴關係,以便一個對象的狀態發生變化時,所有依賴於它的對象都得到通知並自動重新整理。

觀察者模式實現方式:

觀察者模式有很多實現方式,從根本上說,該模式必須包含兩個角色:觀察者和被觀察對象。在剛才的例子中,業務資料是被觀察對象,使用者介面是觀察者。觀察者和被觀察者之間存在"觀察"的邏輯關聯,當被觀察者發生改變的時候,觀察者就會觀察到這樣的變化,並且做出相應的響應。如果在使用者介面、業務資料之間使用這樣的觀察過程,可以確保介面和資料之間劃清界限,假定應用程式的需求發生變化,需要修改介面的表現,只需要重新構建一個使用者介面,業務資料不需要發生變化。

類設計

  1. 增加,刪除,通知觀察者對象主題介面

《interface》 Subject

+addObserver() 增加(註冊)觀察者

+moveObserver() 刪除觀察者

+notifyObserver() 通知(所有)觀察者

2. 被觀察對象繼承觀察者對象主題介面(Subject)

ConcretSubject 繼承 Subject,實現 addObserver() 增加觀察者,moveObserver() 刪除觀察者,notifyObserver() 通知(所有)觀察者

3. 所有觀察者介面

《interface》 Observer

+update() 為被觀察者的資訊變化做出相應的回應

4. 實際的觀察者類

ConcretObserver 繼承 Observer 介面,實現 update()

觀察者執行個體:

public interface StudentSubject {public void addObserver(ParentObserver one);public void moveObserver(ParentObserver one);public void notifyObserver();}package SuperHakceToolSPackage;import java.util.ArrayList;public class Student implements StudentSubject{private float grades;private ArrayList <ParentObserver> parentObservers = new ArrayList<ParentObserver>();@Overridepublic void addObserver(ParentObserver one) {this.parentObservers.add(one);}@Overridepublic void moveObserver(ParentObserver one) {this.parentObservers.remove(one);}@Overridepublic void notifyObserver() {for(int i = 0;i < this.parentObservers.size();i ++){this.parentObservers.get(i).update(grades);}}public void setGrades(float grades){this.grades = grades;notifyObserver();}public float getGrades(){return this.grades;}public void gradesChange(){notifyObserver();}}package SuperHakceToolSPackage;public interface ParentObserver {public void update(float grades);}package SuperHakceToolSPackage;public class Parent implements ParentObserver{private float grades;public Parent(Student student){student.addObserver(this);}@Overridepublic void update(float grades) {this.grades = grades;print();}public void print(){System.out.println("I am Parent and your grades is " + this.grades);}}package SuperHakceToolSPackage;public class ParentTwo implements ParentObserver{private float grades;public ParentTwo(Student student){student.addObserver(this);}@Overridepublic void update(float grades) {this.grades = grades;print();}public void print(){System.out.println("I am ParentTwo and your grades is " + this.grades);}}


本文出自 “SuperHakce” 部落格,請務必保留此出處http://superhakce.blog.51cto.com/6671637/1899153

Java 設計模式之觀察者模式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.