標籤: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設計模式之觀察者模式