自我理解-观察者(Observer)模式

发布时间:2019-11-20 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了自我理解-观察者(Observer)模式脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

观察者(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 List<String> proList = 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+"]到京东商城!");     } }

结果测试

结果展示中,我们通过在列表中新增一个产品,然后来观察者和被观察者之间的变化,执行代码可得到以下结果:

新增一个产品:

自我理解-观察者(Observer)模式

产品为空:

自我理解-观察者(Observer)模式

脚本宝典总结

以上是脚本宝典为你收集整理的自我理解-观察者(Observer)模式全部内容,希望文章能够帮你解决自我理解-观察者(Observer)模式所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。