知识大全 Java设计模式之Observer模式

Posted

篇首语:听闻少年二字,当与平庸相斥。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java设计模式之Observer模式相关的知识,希望对你有一定的参考价值。

Java设计模式之Observer模式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  Observer(观察者)模式是比较常用的一个模式 尤其在界面设计中应用广泛 而本站所关注的是Java 在电子商务系统中应用 因此想从电子商务实例中分析Observer 的应用

  虽然网上商店形式多样 每个站点有自己的特色 但也有其一般的共性 单就 商品的变化 以便及时通知订户 这一点 是很多网上商店共有的模式 这一模式类似Observer patern

  具体的说 如果网上商店中商品在名称 价格等方面有变化 如果系统能自动通知会员 将是网上商店区别传统商店的一大特色 这就需要在商品product 中加入Observer 这样角色 以便product 细节发生变化时 Observer 能自动观察到这种变化 并能进行及时的update 或notify 动作

   

  Java 的API 还为为我们提供现成的Observer 接口Java util Observer 我们只要直接使用它就可以

  我们必须extends Java util Observer 才能真正使用它:

   提供Add/Delete observer 的方法;

   提供通知(notisfy) 所有observer 的方法;

  //产品类 可供Jsp 直接使用UseBean 调用 该类主要执行产品数据库插

  入 更新

  public class product extends Observable

  private String name;

  private float price;

  public String getName()

  return name;

  

  public void setName()

  this name=name;

  //设置变化点

  setChanged();

  notifyObservers(name);

  

  public float getPrice()

  return price;

  

  public void setPrice()

  this price=price;

  //设置变化点

  setChanged();

  notifyObservers(new Float(price));

  

  //以下可以是数据库更新 插入命令

  public void saveToDb()

  

  

  我们注意到 在product 类中 的setXXX 方法中 我们设置了 notify(通知)方法 当Jsp 表单调用setXXX(如何调用见我的另外一篇文章) 实际上就触发了notisfyObservers 方法 这将通知相应观察者应该采取行动了

  下面看看这些观察者的代码 他们究竟采取了什么行动:

  //观察者NameObserver 主要用来对产品名称(name)进行观察的

  public class NameObserver implements Observer

  private String name=null;

  public void update(Observable obj Object arg)

  if (arg instanceof String)

  name=(String)arg;

  //产品名称改变值在name 中

  System out println( NameObserver :name changet to +name);

  

  

  

  //观察者PriceObserver 主要用来对产品价格(price)进行观察的

  public class PriceObserver implements Observer

  private float price= ;

  public void update(Observable obj Object arg)

  if (arg instanceof Float)

  price=((Float)arg) floatValue();

  System out println( PriceObserver :price changet to +price);

  

  

  

  Jsp 中我们可以来正式执行这段观察者程序:

  <jsp:useBean id= product scope= session class= Product />

  <jsp:setProperty name= product property= * />

  <jsp:useBean id= nameobs scope= session class= NameObserver />

  <jsp:setProperty name= product property= * />

  <jsp:useBean id= priceobs scope= session class= PriceObserver />

  <jsp:setProperty name= product property= * />

  <%

  if (request getParameter( save )!=null)

  

  product saveToDb();

  out println( 产品数据变动 保存! 并已经自动通知客户 );

  else

  //加入观察者

  product addObserver(nameobs);

  product addObserver(priceobs);

  %>

  //request getRequestURI()是产生本jsp 的程序名 就是自己调用自己

  <form action= <%=request getRequestURI()%> method=post>

  <input type=hidden name= save value= >

  产品名称:<input type=text name= name >

  产品价格:<input type=text name= price >

  <input type=submit>

  </form>

  <%

  

  %>

  执行改Jsp 程序 会出现一个表单录入界面 需要输入产品名称 产品价格 点按Submit 后 还是执行该jsp 的

  if (request getParameter( save )!=null)之间的代码

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

  NameObserver :name changet to ?????(Jsp 表单中输入的产品名称)

  PriceObserver :price changet to ???(Jsp 表单中输入的产品价格);

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

  同时你会在执行jsp 的浏览器端得到信息:

  产品数据变动 保存! 并已经自动通知客户

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

  public class Test

  public static void main(String args[])

  Product product=new Product();

  NameObserver nameobs=new NameObserver();

  PriceObserver priceobs=new PriceObserver();

  //加入观察者

  product addObserver(nameobs);

  product addObserver(priceobs);

  product setName( 橘子红了 );

  product setPrice( f);

  

  

  你会在发现下面信息::

  NameObserver :name changet to 橘子红了

  PriceObserver :price changet to

cha138/Article/program/Java/gj/201311/27356

相关参考

知识大全 .net中委托,时间和Observer设计模式

.net中委托,时间和Observer设计模式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  将

知识大全 自验证文本框和Observer模式

自验证文本框和Observer模式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  最近写程序当中

知识大全 利用Observer模式解决组件间通信问题

利用Observer模式解决组件间通信问题  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  问题的

知识大全 php设计模式之观察者模式的应用详解

 代码如下:<?php//抽象主题interfaceSubjectpublicfunctionattach($observer);publicfunctiondetach($obser

知识大全 Java设计模式之Strategy模式

Java设计模式之Strategy模式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Strat

知识大全 Java设计模式之Command 模式

Java设计模式之Command模式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Comman

知识大全 Java设计模式之Adapter模式

Java设计模式之Adapter模式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  通常客户类(

知识大全 Java设计模式之计数代理模式

Java设计模式之计数代理模式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  描述    计数代

知识大全 Java设计模式之Decorator模式

Java设计模式之Decorator模式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  JDK为

知识大全 Java设计模式之迭代器模式

Java设计模式之迭代器模式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!一引言  迭代这个名词对