脚本宝典收集整理的这篇文章主要介绍了自我理解-观察者(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)模式所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。