重慶分公司,新征程啟航
為企業(yè)提供網站建設、域名注冊、服務器等服務
為企業(yè)提供網站建設、域名注冊、服務器等服務
創(chuàng)新互聯(lián)是一家專業(yè)的成都網站建設公司,我們專注成都網站設計、成都做網站、網絡營銷、企業(yè)網站建設,友情鏈接,廣告投放平臺為企業(yè)客戶提供一站式建站解決方案,能帶給客戶新的互聯(lián)網理念。從網站結構的規(guī)劃UI設計到用戶體驗提高,創(chuàng)新互聯(lián)力求做到盡善盡美。
觀察者下篇
在上一篇文章中,我們通過污污彈公司司小司做氣象站項目學習了觀察者模式怎么使用。在本篇中,我們對觀察者模式進行總結及關鍵點,還有一個就是Java中內置的觀察者模式。
本文出處:凱哥Java(kagejava)
一:Java內置的觀察者
我們將使用Java內置的觀察者將氣象站項目重新寫一次。
內置觀察者的區(qū)別:
Subject對象:
1:subject名稱變了,變成了Observable了;功能不變,還是注冊、移除、通知觀察者三個功能;
2:observable是對象而非接口了,所以在使用的時候,不能在使用實現(xiàn)了,需要使用繼承關系。好處就是:因為是繼承關系,所以在注冊觀察者、移除觀察者、通知觀察者這三個方法具體實現(xiàn)我們可以不用寫了。
Observer對象:
observer對象名字沒有變化,功能還是update,沒有變化。?而且還是接口對象。
那么為什么observer不用類而用接口呢?因為我們知道,我們的observer是不同的項目,需求不一定的。所以,只能使用接口來定義了。具體實現(xiàn),各個項目根據(jù)自己項目功能自行實現(xiàn)即可。
不同:update時候,可以選擇將信息主動推送給觀察者還是讓觀察者自己來拉去。在Java內置的觀察者模式中,推/拉都可以。
使用Java內置觀察者實現(xiàn)的代碼:
項目結構:
測試類:JavaObserverWeatherMainTest
需要說明的:
public class?CurrentConditionJava?implements?Observer {}
實現(xiàn)的Observer對象所在位置:import?java.util.Observer;
public class?WeaterDataJava?extends?Observable {}
繼承的Observerable對象所在位置:import?java.util.Observable;
運行結果:
達到我們預期的效果。說明,使用Java內置的觀察者模式成功!
使用Java內置的觀察者需要唯一注意的地方:observerable的繼承者在datachange時候,需要先setChanged()。如下圖:
這一點一定要注意。
二:觀察者模式總結及關鍵點
百科上對觀察者模式基本介紹:
實現(xiàn)方式:
觀察者模式使用場景:
觀察者模式四個角色:
抽象主題角色(subject)、主題角色具體實現(xiàn)類
抽象觀察者角色(observer)、觀察者具體實現(xiàn)類
觀察者模式的優(yōu)缺點:
觀察者模式執(zhí)行過程
從觀察者模式中體會,松耦合、高內聚、隔離影響的意義:
松耦合:類與類之間不要太依賴,沒有順序。依賴類不用關系被依賴類的內部是怎么實現(xiàn)的。
對應天氣站項目:實現(xiàn)了subject接口的天氣對象不需要關系具體的公告板內部怎么實現(xiàn)的,需要做哪些。subject子類之關心公告板是否實現(xiàn)了observer接口類即可。
聯(lián)系凱哥:
公眾號:凱哥Java(kaigejava)
凱哥個人博客:www.kaigejava.com
留個言,加個好友,一起學習
就算實現(xiàn)了observer的公告板對象項目死掉了,subject對象依然可以正常運行。反之,就算subject項目死掉了,依然不會影響observer項目的運行。無非就是公告板不能公布最新數(shù)據(jù)而已。這就很好的體現(xiàn)了松耦合的好處。
高內聚:對象內部是高內聚的。這樣便于調試、擴展等。