`
IT-future
  • 浏览: 30557 次
  • 来自: ...
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论
阅读更多

Java深入到一定程度,就不可避免的碰到设计模式(design pattern)这一概念,了解设计模式,将使自己对java中的接口或抽象类应用有更深的理解.设计模式在java的中型系统中应用广泛,遵循一定的编程模式,才能使自己的代码便于理解,易于交流,Observer(观察者)模式是比较常用的一个模式,尤其在界面设计中应用广泛,而本站所关注的是Java在电子商务系统中应用,因此想从电子商务实例中分析Observer的应用.<o:p></o:p>

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

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

Java的API还为为我们提供现成的Observer接口Java.util.Observer.我们只要直接使用它就可以.<o:p></o:p>

我们必须extends Java.util.Observer才能真正使用它:
1.提供Add/Delete observer的方法;
2.提供通知(notisfy) 所有observer的方法;<o:p></o:p>

//产品类 可供Jsp直接使用UseBean调用 该类主要执行产品数据库插入 更新
public class product extends Observable{ <o:p></o:p>

  private String name;
  private float price;<o:p></o:p>

  public String getName(){ return name;}
  public void setName(){
   this.name=name;
  //设置变化点
   setChanged();
   notifyObservers(name);<o:p></o:p>

  }   <o:p></o:p>

  public float getPrice(){ return price;}
  public void setPrice(){
   this.price=price;
  //设置变化点
   setChanged();
   notifyObservers(new Float(price)); <o:p></o:p>

  }

  //以下可以是数据库更新 插入命令.
  public void saveToDb(){
  .....................<o:p></o:p>

}<o:p></o:p>


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

下面看看这些观察者的代码,他们究竟采取了什么行动:<o:p></o:p>

//观察者NameObserver主要用来对产品名称(name)进行观察的
public class NameObserver implements Observer{<o:p></o:p>

  private String name=null;<o:p></o:p>

  public void update(Observable obj,Object arg){

    if (arg instanceof String){<o:p></o:p>

     name=(String)arg;
     //产品名称改变值在name中
     System.out.println("NameObserver :name changet to "+name);<o:p></o:p>

    }<o:p></o:p>

  }<o:p></o:p>

}<o:p></o:p>

//观察者PriceObserver主要用来对产品价格(price)进行观察的
public class PriceObserver implements Observer{<o:p></o:p>

  private float price=0;<o:p></o:p>

  public void update(Observable obj,Object arg){

    if (arg instanceof Float){<o:p></o:p>

     price=((Float)arg).floatValue();
  
     System.out.println("PriceObserver :price changet to "+price);<o:p></o:p>

    }<o:p></o:p>

  }<o:p></o:p>

}<o:p></o:p>


Jsp中我们可以来正式执行这段观察者程序:<o:p></o:p>

<jsp:useBean id="product" scope="session" class="Product" />
<jsp:setProperty name="product" property="*" />
<o:p></o:p>

<jsp:useBean id="nameobs" scope="session" class="NameObserver" />
<jsp:setProperty name="product" property="*" />
<o:p></o:p>

<jsp:useBean id="priceobs" scope="session" class="PriceObserver" />
<jsp:setProperty name="product" property="*" />
<o:p></o:p>

<%

if (request.getParameter("save")!=null)
{
  product.saveToDb();


  out.println("产品数据变动 保存! 并已经自动通知客户"); <o:p></o:p>

}else{

  //加入观察者
  product.addObserver(nameobs);

  product.addObserver(priceobs);<o:p></o:p>

%><o:p></o:p>

  //request.getRequestURI()是产生本jsp的程序名,就是自己调用自己
  <form action="<%=request.getRequestURI()%>" method=post><o:p></o:p>

  <input type=hidden name="save" value="1">
  产品名称:<input type=text name="name" >
  产品价格:<input type=text name="price">
  <input type=submit><o:p></o:p>

  </form><o:p></o:p>

<%

} <o:p></o:p>

%><o:p></o:p>

 <o:p></o:p>

 <o:p></o:p>

 <o:p></o:p>

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


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

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

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

这说明观察者已经在行动了.!!
同时你会在执行jsp的浏览器端得到信息:

产品数据变动 保存! 并已经自动通知客户 <o:p></o:p>

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

 <o:p></o:p>

public class Test {<o:p></o:p>

  public static void main(String args[]){<o:p></o:p>

Product product=new Product();

NameObserver nameobs=new NameObserver();
PriceObserver priceobs=new PriceObserver();<o:p></o:p>

//加入观察者
product.addObserver(nameobs);
product.addObserver(priceobs);<o:p></o:p>

product.setName("橘子红了");
product.setPrice(9.22f); <o:p></o:p>

  }<o:p></o:p>

}<o:p></o:p>

 <o:p></o:p>

 <o:p></o:p>

 <o:p></o:p>

你会在发现下面信息::

NameObserver :name changet to 橘子红了

PriceObserver :price changet to 9.22
<o:p></o:p>

这说明观察者在行动了.!!<o:p></o:p>

 

分享到:
评论

相关推荐

    设计模式之Observer - 观察者模式

    观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于实现事件驱动编程或者...

    java设计模式之Observer参考.pdf

    Observer模式,也称为发布-订阅(Publish/Subscribe)模式,是一种行为设计模式,它允许对象在状态发生改变时通知其他对象,而无需显示地指定这些对象。在Java中,Observer模式通过`java.util.Observable`和`java....

    java设计模式之Observer[整理].pdf

    Observer(观察者)模式是设计模式中的一种,常用于实现对象之间的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。在这个场景中,我们将讨论如何在Java中应用Observer模式,特别...

    JAVA设计模式chm文档

    设计模式之Observer 设计模式之Chain of Responsibility(职责链) 设计模式之Command 设计模式之State 设计模式之Strategy(策略) 设计模式之Mediator(中介者) 设计模式之Interpreter(解释器) 设计模式之Visitor

    Java设计模式 设计模式介绍

    1、爪哇语言结构性模式之变压器模式介绍 2、爪哇语言抽象工厂创立性模式介绍 3、工厂方法创立性模式介绍 4、单态创立性模式介绍 5、单态创立性模式介绍 6、观察者模式介绍7、责任链模式 8、设计模式之Observer 9、...

    设计模式文档 chm

    设计模式之Observer 设计模式之Chain of Responsibility(职责链) 设计模式之Command 设计模式之State 设计模式之Strategy(策略) 设计模式之Mediator(中介者) 设计模式之Interpreter(解释器) 设计模式之Visitor

    Observer设计模式实例

    Observer设计模式,也被称为“发布-订阅”(Publish-Subscribe)模式或“依赖倒置”模式,是软件设计中的一种行为模式。它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到...

    C#设计模式之Observer观察者模式解决牛顿童鞋成绩问题示例

    本文实例讲述了C#设计模式之Observer观察者模式解决牛顿童鞋成绩问题。分享给大家供大家参考,具体如下: 一.理论定义 观察者模式 描述了 一种 一对多的关系。 当某一对象的状态发生改变时,其他对象会得到 改变的...

    二十三种设计模式【PDF版】

    设计模式之 Observer(观察者) 介绍如何使用 Java API 提供的现成 Observer 设计模式之 Iterator(迭代器) 这个模式已经被整合入Java的Collection.在大多数场合下无需自己制造一个Iterator,只要将对象装入...

    设计模式C++学习之观察者模式(Observer)

    观察者模式(Observer)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式在C++中广泛应用,特别是在需要...

    设计模式之观察者模式(Observer Pattern)

    观察者模式,也被称为发布-订阅模式或事件驱动模式,是软件设计模式中的一种行为模式。这个模式的主要目的是在对象之间建立一种松散耦合的关系,使得当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并...

    设计模式之观察者模式(Observer)

    观察者模式(Observer)是软件设计模式中的一种行为模式,其主要目的是在对象之间建立一种松散耦合的关系,使得当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式广泛应用于事件驱动...

    [行为模式]head first 设计模式之观察者模式(observer)

    观察者模式(Observer Pattern)是设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式在软件开发中广泛应用于事件驱动...

    从Java类库看设计模式

    ### 从Java类库看设计模式之Observer模式详解 #### 一、引言 在软件开发过程中,常常遇到需要在不同对象之间建立依赖关系的情况,其中一个对象的状态变化会影响到另一个对象的行为。这种需求可以用设计模式中的...

    C#面向对象设计模式纵横谈(19):(行为型模式) Observer 观察者模式 (Level 300)

    **C#面向对象设计模式纵横谈(19)**:**观察者模式**(Observer Pattern)是行为型模式的一种,它在软件工程中扮演着至关重要的角色。观察者模式是一种设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态...

    OBserver模式设计实现

    观察者模式(Observer Pattern)是一种行为设计模式,它允许你定义一个订阅机制,可以在对象状态改变时通知多个“观察”该对象的其他对象。在Java和C++等面向对象编程语言中,这种模式广泛用于事件处理和实时系统,...

    设计模式之美—学习笔记

    在这个“设计模式之美”的学习笔记中,我们将探讨一些主要的设计模式,以及它们在实际开发中的应用。 首先,我们从创建型模式开始。这类模式主要用于对象的创建,如单例模式(Singleton)、工厂模式(Factory ...

    设计模式之略见一斑(Observer观察者模式)

    本篇文章将深入探讨“Observer”观察者模式,这是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 观察者模式的核心概念是主题...

Global site tag (gtag.js) - Google Analytics