摘要:觀察者模式觀察者模式也可以成為發布訂閱模式,此模式是對象之間的模式,對象之間呈現一種一對多的關系。其中的一是被觀察者,多是觀察者,故被觀察者不能產生多個對象,只能有一個對象供觀察者觀察,所以在寫被觀察者的時候,需要使用到單例模式。
觀察者(Observer)模式
觀察者(Observer)模式 也可以成為發布訂閱模式,此模式是對象之間的模式,對象之間呈現一種一對多的關系。其中的一是被觀察者,多是觀察者,故被觀察者不能產生多個對象,只能有一個對象供觀察者觀察,所以在寫被觀察者的時候,需要使用到單例模式。
代碼理解那么我們可以通過代碼來很直觀的理解觀察者模式
package observer; import java.util.ArrayList; import java.util.List; import java.util.Observable; import java.util.Observer; //被觀察者--產品列表 public class Products extends Observable { //產品列表 private ListproList = null; private static Products instance; //類唯一的實例(使用單例模式) private Products() { } //單例模式-獲取列表對象 public static Products getInstance() { if(instance == null) { instance = new Products(); instance.proList = new ArrayList<>(); } return instance; } /** * 增加觀察者(電商接口) * @param observer 觀察者 */ public void addProductsObserver(Observer observer) { this.addObserver(observer); } /** * 新增產品(被觀察者) * @param newProduct 新產品 */ public void addProduct(String newProduct) { if(newProduct==null || "".equals(newProduct)) { System.out.println("未新增產品或新增產品為空!"); }else { System.out.println("目前產品列表中有:"+proList.size()+"個產品!"); //新增產品 proList.add(newProduct); System.out.println("產品列表中新增了產品:"+newProduct); System.out.println("目前產品列表中有:"+proList.size()+"個產品!"); //設置被觀察者對象發生了變化(告知觀察者,產品列表發生了變化) this.setChanged(); //通知觀察者,并傳遞新產品 this.notifyObservers(newProduct); } } }
package observer; import java.util.Observable; import java.util.Observer; //觀察者1-京東商城接口 public class JDObserver implements Observer { /** * 京東觀察者接口 * 1.Observable 被觀察者 * 2.product 產品 */ @Override public void update(Observable o, Object product) { Products pro = (Products) o; System.out.println("被觀察者:"+ pro); String newProduct = (String) product; System.out.println("同步新產品【"+newProduct+"]到京東商城!"); } }
package observer; import java.util.Observable; import java.util.Observer; //觀察者 public class TaoBaoObserver implements Observer { /** * 淘寶觀察者接口 * 1.Observable 被觀察者 * 2.product 產品 */ @Override public void update(Observable o, Object product) { Products pro = (Products) o; System.out.println("被觀察者:"+ pro); String newProduct = (String) product; System.out.println("同步新產品【"+newProduct+"]到京東商城!"); } }結果測試
結果展示中,我們通過在列表中新增一個產品,然后來觀察者和被觀察者之間的變化,執行代碼可得到以下結果:
新增一個產品: 產品為空:文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/69627.html
摘要:觀察者模式面向的需求是對象觀察者對對象被觀察者的某種變化高度敏感,需要在變化的一瞬間做出反應。規定,當不會再有新的發出時,需要觸發方法作為標志。在事件處理過程中出異常時,會被觸發,同時隊列自動終止,不允許再有事件發出。 我從去年開始使用 RxJava ,到現在一年多了。今年加入了 Flipboard 后,看到 Flipboard 的 Android 項目也在使用 RxJava ,并且使...
摘要:再獲取其事件屬性,我們這里只簡單地獲取屬性,我們將它的屬性值和元素標識保存到中最后等待模版掛載在元素中后,我們遍歷數組,掛載事件至此,我的已基本實現了實現的是一個簡單的計數器有興趣的小伙伴可以復制以下代碼運行查看效果 這周參考了一些博文,自己寫了一個簡單的vue,網上這類實現很多,我的實現也沒什么新奇,權當一個自我練習吧 本文同時發在我的github博客上,歡迎star 具體實現 首先...
摘要:在沒有環境下對進行單元測試的時候,應用邏輯正確性是無法驗證的更新的時候,無法對的更新操作進行斷言。對是通過接口進行,在對進行不依賴環境的單元測試的時候。這里根據上面的例子給出了的單元測試樣例。年微軟工程師在自己的博客上首次公布了模式。 前言 做客戶端開發、前端開發對MVC、MVP、MVVM這些名詞不了解也應該大致聽過,都是為了解決圖形界面應用程序復雜性管理問題而產生的應用架構模式。網上...
閱讀 797·2019-08-30 15:54
閱讀 439·2019-08-30 12:51
閱讀 2022·2019-08-29 16:28
閱讀 2842·2019-08-29 16:10
閱讀 2331·2019-08-29 14:21
閱讀 409·2019-08-29 14:09
閱讀 2127·2019-08-23 16:13
閱讀 1236·2019-08-23 13:59