觀察者模式(observer pattern):當乙個物件被修改時,會自動通知它的依賴物件
現在我們是新聞社,要向所有新聞訂閱者推送新聞。那麼該如何實現呢?
經過思考我們不難發現一家新聞社一般對應的是多個新聞訂閱者。
那麼我們先從新聞社開始入手,想一想新聞社要具備哪些基本功能呢?
1.新聞,2.有哪些訂閱者,3.新增訂閱者,4.取消訂閱者,5推送新聞。
//新聞社
public class news*****
public void removesubscriber(subscriber subscriber)
public void sendnews()
} public string getnews()
public void setnews(string news)
}
新聞社已經規劃好,現在考慮訂閱者,訂閱者是多個,那麼我們先定義一套訂閱者的標準(介面),並考慮訂閱者需要做的事:
1.接收新聞
//訂閱者
public inte***ce subscriber
標準寫好了,現在有兩個客戶聯絡上我們,要成為我們的訂閱者:
//訂閱者one
public class subscriberone implements subscriber
}//訂閱者two
public class subscribertwo implements subscriber
}
規劃了新聞社,與訂閱者籤了合同,現在來實際操作一下:
public static void main(string args)
觀察者模式(推模型),執行結果:
訂閱者one,接收到新聞:70周年
訂閱者two,接收到新聞:70周年
不難發現,這個設定新聞和傳送新聞,其實可以整合一下,第一種直接傳送新聞內容就行,第二種設定新聞時,自動推送給所有訂閱者,但是都還屬於推模型,先來實現第一種,改造新聞社:
//新聞社
public class news*****
public void removesubscriber(subscriber subscriber)
public void sendnews(string news) }
}
重新執行下:
public static void main(string args)
結果一致:
訂閱者one,接收到新聞:70周年
訂閱者two,接收到新聞:70周年
現在來實現第二種,改造新聞社:
//新聞社
public class news*****
public void removesubscriber(subscriber subscriber)
public void sendnews()
} public string getnews()
public void setnews(string news)
}
重新執行一下:
public static void main(string args)
執行結果一致:
訂閱者one,接收到新聞:70周年
訂閱者two,接收到新聞:70周年
以上是推模型的實現方法,那什麼是拉模型呢?先看這兩個地方:
新聞社推送的都是新聞,並且訂閱者訂閱的是新聞的內容。我們是否可以不推新聞,而是把新聞社提供給訂閱者,需要時訂閱者自己去獲取新聞呢?下面重新改造一下:
//新聞社
public class news*****
public void removesubscriber(subscriber subscriber)
public void sendnews*****()
} public string getnews()
public void setnews(string news)
}//訂閱者定義
public inte***ce subscriber
//訂閱者one
public class subscriberone implements subscriber
}//訂閱者two
public class subscribertwo implements subscriber
}
拉模型已經寫好,現在執行一下:
public static void main(string args)
執行結果
訂閱者one,接收到新聞:70周年
訂閱者two,接收到新聞:70周年
推拉模式與觀察者模式
最近做乙個訊息系統,其中涉及到新訊息數的即時更新,當時就想到了觀察者模式,後來聽同事提到推拉模式,感覺推模式原理上應該還是屬於觀察者模式,只不過把server變成了被觀察物件,client被動觀察 其實推拉模式我們經常遇到,如廣播 推 http請求 拉 只是沒有刻意去追求概念。設計時還是應該多考慮到...
行為型模型 觀察者模式
subject 被觀察者 被觀察的物件。當需要被觀察的狀態發生變化時,需要通知佇列中所有觀察者物件。subject需要維持 新增,刪除,通知 乙個觀察者物件的佇列列表。concretesubject 被觀察者的具體實現。包含一些基本的屬性狀態及其他操作。observer 觀察者 介面或抽象類。當su...
設計模式學習(八) 觀察者模式 1(拉模式)
2019年4月10日 觀察者模式 在物件之間定義了一對多的依賴,這樣一來,當乙個物件改變狀態,依賴它的物件會收到通知並自動更新。其實就是發布訂閱模式,發布者發布資訊,訂閱者獲取資訊,訂閱了就能收到資訊,沒訂閱就收不到資訊。推 push 模式是一種基於客戶器 伺服器機制,由伺服器主動將資訊送到客戶器的...