[目的] [何时使用?] 具体的说,如果网上商店中商品在名称 价格等方面有变化,如果系统能自动通知会员,将是网上商店区别传统商店的一大特色.这就需要在商品product中加入Observer这样角色 ,以便product细节发生变化时,Observer能自动观察到这种变化,并能进行及时的update或notify动作. 因此在实现中必须为要使用Observer的类添加如下功能: 示例代码:(JSP,直接扩展Java的API提供的Observer接口Java.util.Observer) //产品类 可供Jsp直接使用UseBean调用 该类主要执行产品数据库插入更新 public String getName(){ return name;} } public float getPrice(){ return price;} } //以下可以是数据库更新 插入命令.
我们注意到,在product类中 的setXXX方法中,我们设置了 notify(通知)方法, 当Jsp表单调用setXXX(如何调用见我的另外一篇文章),实际上就触发了notisfyObservers方法,这将通知相应观察者应该采取行动了. 下面看看这些观察者的代码,他们究竟采取了什么行动: //观察者NameObserver主要用来对产品名称(name)进行观察的 private String name=null; public void update(Observable obj,Object arg){ if (arg instanceof String){ name=(String)arg; }
} //观察者PriceObserver主要用来对产品价格(price)进行观察的 private float price=0; public void update(Observable obj,Object arg){ if (arg instanceof Float){ price=((Float)arg).floatValue(); }
}
Jsp中我们可以来正式执行这段观察者程序: <jsp:useBean id="product" scope="session" class="Product" /> <jsp:useBean id="nameobs" scope="session" class="NameObserver" /> <jsp:useBean id="priceobs" scope="session" class="PriceObserver" /> <% if (request.getParameter("save")!=null)
}else{ //加入观察者 product.addObserver(priceobs); %> //request.getRequestURI()是产生本jsp的程序名,就是自己调用自己 <input type=hidden name="save" value="1"> </form> <% } %> 执行改Jsp程序,会出现一个表单录入界面, 需要输入产品名称 产品价格, 点按Submit后, 还是执行该jsp的if (request.getParameter("save")!=null)之间的代码.
NameObserver :name changet to ?????(Jsp表单中输入的产品名称)PriceObserver :price changet to ???(Jsp表单中输入的产品价格); 这说明观察者已经在行动了.!! 同时你会在执行jsp的浏览器端得到信息:产品数据变动 保存! 并已经自动通知客户
上文由于使用jsp概念,隐含很多自动动作,现将调用观察者的Java代码写如下: public static void main(String args[]){ Product product=new Product(); NameObserver nameobs=new NameObserver(); //加入观察者 product.setName("橘子红了"); } } |
温馨提示:喜欢本站的话,请收藏一下本站!