Java設計模式之觀察者模式

來源:互聯網
上載者:User

標籤:java   設計模式   

Android開發如果不懂設計模式,那麼再深度研究就會困難重重,筆者深有體會,研究設計模式勢在必行:

第一篇:觀察者模式:

觀察者模式定義:定義對象間的一種一對多的依賴關係,當一個對象的狀態發生改變時,所有依賴於它的對象都會得到通知並會自動更新。

觀察者模式中主要有目標對象(被觀察者)和觀察者2個對象。

本文使用報社(目標對象)與讀者(觀察者)來形象替代以上2個對象,實現流程如下:

讀者申請報社--->報社保留讀者資訊--->報社有新的報紙--->一起發送給多個讀者--->讀者得到新的報紙(資料更新)。

實現代碼如下:


目標對象:

package com.hongri.observerpatterns;import java.util.ArrayList;import java.util.List;/** * 目標對象 * @author zhongyao */public class Subject {//用來儲存已申請報社的讀者們private List<Observer> readers = new ArrayList<Observer>();//添加讀者public void attach(Observer reader){readers.add(reader);}//刪除讀者public void detach(Observer reader){readers.remove(reader);}//通知所有讀者有新的報紙資訊(資料更新)protected void notifyObervers(){for (Observer reader : readers) {reader.update(this);}}}


目標對象的具體實作類別:
package com.hongri.observerpatterns;/** * 具體的目標實現 * @author zhongyao */public class NewsPaper extends Subject {private String content;public String getContent() {return content;}public void setContent(String content) {this.content = content;notifyObervers();}}


觀察者介面:
package com.hongri.observerpatterns;/** * 觀察者 * @author zhongyao */public interface Observer {public void update(Subject subject);}


觀察者介面的具體實作類別:

package com.hongri.observerpatterns;/** * 觀察者實現 *  * @author zhongyao */public class Reader implements Observer {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic void update(Subject subject) {System.out.println(name + "收到報紙了,閱讀它。內容是==="+ ((NewsPaper) subject).getContent());}}

Java用戶端測試入口:

package com.hongri.main;import com.hongri.observerpatterns.NewsPaper;import com.hongri.observerpatterns.Reader;public class ObserverPClient {/** * (觀察者模式)用戶端 * @param args */public static void main(String[] args) {//報社(被觀察者)NewsPaper subject = new NewsPaper();//讀者(觀察者)Reader reader1 = new Reader();reader1.setName("張三");Reader reader2 = new Reader();reader2.setName("李四");Reader reader3 = new Reader();reader3.setName("王五");Reader reader4 = new Reader();reader4.setName("趙六");//添加讀者(觀察者)到報社(目標對象)subject.attach(reader1);subject.attach(reader2);subject.attach(reader3);subject.attach(reader4);subject.setContent("本期內容是觀察者模式...");}}

實現效果:




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.