java软件体系设计模式-----访问者

原创 2011年10月16日 21:32:40

说明:

访问者模式可用于设计一个集合操作,该操作跨越由包含在同一类层次结构当中的一类对象组成的一个对象集。访问者模式允许在不改变对象集所属类的前提下定义操作。


设计思想:

对象集中的对象所属的类需要定义一个方法。

对执行访问者操作感兴趣的客户需要做到:

a,创建一个被设计用来执行所需操作的VisitorInteface接口的实现者(访问者)类的实例。

b,创建对象集,以上面创建的访问者实例作为参数调用其中每个成员对象的accept(visitor)方法。


实例:
它定义一些用于由不同类型的Order对象组成的对象集的操作。订单有以下三种类型:海外订单,加州订单,非加州订单


代码:

public interface Order {
  public void accept(OrderVisitor v);
}


public class OverseasOrder implements Order {
  private double orderAmount;
  private double additionalSH;


  public OverseasOrder() {
  }
  public OverseasOrder(double inp_orderAmount,
      double inp_additionalSH) {
    orderAmount = inp_orderAmount;
    additionalSH = inp_additionalSH;
  }
  public double getOrderAmount() {
    return orderAmount;
  }
  public double getAdditionalSH() {
    return additionalSH;
  }
  public void accept(OrderVisitor v) {
    v.visit(this);
  }
}


public class CaliforniaOrder implements Order {
  private double orderAmount;
  private double additionalTax;


  public CaliforniaOrder() {
  }
  public CaliforniaOrder(double inp_orderAmount,
      double inp_additionalTax) {
    orderAmount = inp_orderAmount;
    additionalTax = inp_additionalTax;
  }
  public double getOrderAmount() {
    return orderAmount;
  }
  public double getAdditionalTax() {
    return additionalTax;
  }
  public void accept(OrderVisitor v) {
    v.visit(this);
  }
}


public class NonCaliforniaOrder implements Order {
  private double orderAmount;


  public NonCaliforniaOrder() {
  }
  public NonCaliforniaOrder(double inp_orderAmount) {
    orderAmount = inp_orderAmount;
  }
  public double getOrderAmount() {
    return orderAmount;
  }
  public void accept(OrderVisitor v) {
    v.visit(this);
  }
}


public interface VisitorInterface {
  public void visit(NonCaliforniaOrder nco);
  public void visit(CaliforniaOrder co);
  public void visit(OverseasOrder oo);
}


import java.util.*;


class OrderVisitor implements VisitorInterface {
  private Vector orderObjList;
  private double orderTotal;


  public OrderVisitor() {
    orderObjList = new Vector();
  }
  public void visit(NonCaliforniaOrder inp_order) {
    orderTotal = orderTotal + inp_order.getOrderAmount();
  }
  public void visit(CaliforniaOrder inp_order) {
    orderTotal = orderTotal + inp_order.getOrderAmount() +
                 inp_order.getAdditionalTax();
  }
  public void visit(OverseasOrder inp_order) {
    orderTotal = orderTotal + inp_order.getOrderAmount() +
                 inp_order.getAdditionalSH();
  }
  public double getOrderTotal() {
    return orderTotal;
  }
}


如果有一种新类型的对象(一个新的类),比如一个实现Order接口的DiscountOrder要加入到对象结构中,那么就需要在VisitorInterface接口当中加入一个对应的visit(DiscountOrder)f方法,并且在OrderVistor类当中实现它。


文档与源代码下载地址:http://download.csdn.net/detail/hnzhangshilong/3685894

用32行代码表示16个设计模式

为了演示以下16个模式,用了下面32行代码。iterator,adapter,interpreter,proxy,state,visitor,command,bridge,chain of respo...
  • xxcc
  • xxcc
  • 2002-06-22 17:38:00
  • 1549

Java设计模式之--访问者模式(Visitor)

概念: 访问者模式(Visitor)行为设计模式。访问者模式被用在针对一组相同类型对象的操作。优点是,可以把针对此对象的操作逻辑转移到另外一个类上。用于数据结构和作用于结构上的操作解耦合,使得操作集合...
  • lqh517
  • lqh517
  • 2016-06-24 12:12:46
  • 402

JAVA设计模式之 访问者模式【Visitor Pattern】

一、概述     访问者模式是一种较为复杂的行为型设计模式,它包含访问者和被访问元素两个主要组成部分,这些被访问的元素通常具有不同的类型,且不同的访问者可以对它们进行不同的访问操作。在使用访问者...
  • l416112167
  • l416112167
  • 2014-11-15 22:21:32
  • 3505

Java设计模式(三) Visitor(访问者)模式及多分派场景应用

基本概念Visitor 封装一些作用于数据结构中的各元素的操作,不同的操作可以借助新的visitor实现,降低了操作间的耦合性 访问者可以将数据结构和对数据的操作解耦,使得增加对数据结构的操作不需要取...
  • qq_24451605
  • qq_24451605
  • 2016-04-14 15:32:41
  • 5600

JAVA设计模式十四--Visitor(访问者模式)

访问者模式(Visitor Pattern)是GoF提出的23种设计模式中的一种,属于行为模式。 据《大话设计模式》中说算是最复杂也是最难以理解的一种模式了。    定义(源于GoF《Design...
  • hfmbook
  • hfmbook
  • 2012-06-22 10:20:45
  • 9163

java设计模式-访问者模式visit

一般场景:一个数据结构可以被多种不同对象访问操作; 类比:医院开的方子,可以被划价员计算医药费,可以被药房抓药,。。。 demo:  抽象访问者:Visitor.Java publ...
  • sidihuo
  • sidihuo
  • 2017-02-06 14:11:59
  • 1276

设计模式总结之Visitor Pattern(访问者模式)

表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。...
  • cooldragon
  • cooldragon
  • 2016-08-12 12:10:15
  • 4862

软件体系结构设计模式作业

  • 2009年06月01日 00:35
  • 298KB
  • 下载

关于软件体系结构设计模式的总结

因为软件体系结构的设计模式太多了,如果用的不多,shi
  • u013712592
  • u013712592
  • 2014-05-28 22:27:56
  • 1484

设计模式画图程序

  • 2013年06月23日 17:27
  • 55KB
  • 下载
收藏助手
不良信息举报
您举报文章:java软件体系设计模式-----访问者
举报原因:
原因补充:

(最多只允许输入30个字)