Java观察者模式(Observer模式)(2)

1 <jsp:useBean scope="session" class="Product" /> 2 <jsp:setProperty property="*" /> 3 4 <jsp:useBean scope="session" class="NameObserver" /> 5 <jsp:setProperty property="*" /> 6 7 <jsp:useBean scope="session" class="PriceObserver" /> 8 <jsp:setProperty property="*" /> 9 10 <% 11 if (request.getParameter("save")!=null) 12 { 13   product.saveToDb(); 14   out.println("产品数据变动 保存! 并已经自动通知客户"); 15 }else{ 16   //加入观察者 17   product.addObserver(nameobs); 18   product.addObserver(priceobs); 19 %> 20   //request.getRequestURI()是产生本jsp的程序名,就是自己调用自己 21   <form action="<%=request.getRequestURI()%>" method=post> 22 �� <input type=hidden value="1"> 23   产品名称:<input type=text > 24   产品价格:<input type=text> 25   <input type=submit> 26   </form> 27 <% 28 } 29 %>

执行改Jsp程序,会出现一个表单录入界面,需要输入产品名称 产品价格,点按Submit后,还是执行该jsp的if (request.getParameter("save")!=null)之间的代码。


由于这里使用了数据javabeans的自动赋值概念,实际程序自动执行了setName setPrice语句。你会在服务器控制台中发现下面信息:

1 NameObserver :name changet to ?????(Jsp表单中输入的产品名称) 2 PriceObserver :price changet to ???(Jsp表单中输入的产品价格);

这说明观察者已经在行动了。


同时你会在执行jsp的浏览器端得到信息:
    产品数据变动 保存! 并已经自动通知客户

上文由于使用jsp概念,隐含很多自动动作,现将调用观察者的Java代码写如下:

1 public class Test { 2   public static void main(String args[]){ 3     Product product=new Product(); 4     NameObserver nameobs=new NameObserver(); 5     PriceObserver priceobs=new PriceObserver(); 6 7     //加入观察者 8     product.addObserver(nameobs); 9     product.addObserver(priceobs); 10 11     product.setName("橘子红了"); 12     product.setPrice(9.22f); 13   } 14 }

你会在发现下面信息:

    NameObserver :name changet to 橘子红了
    PriceObserver :price changet to 9.22

这说明观察者在行动了。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/25262d32f366fb8ea31dbd3c85fd2dfe.html