知识大全 visitor模式概念——visitor模式进一步

Posted

篇首语:别裁伪体亲风雅,转益多师是汝师。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 visitor模式概念——visitor模式进一步相关的知识,希望对你有一定的参考价值。

  一 访问者模式的角色 抽象访问者 声明一个或者多个访问操作 形成所有的具体元素都要实现的接口具体访问者 实现抽象访问者所声明的接口抽象节点 声明一个接受操作 接受一个访问者对象作为参量具体节点 实现了抽象元素所规定的接受操作结构对象 遍历结构中的所有元素 类似List Set等二 在什么情况下应当使用访问者模式访问者模式应该用在被访问类结构比较稳定的时候 换言之系统很少出现增加新节点的情况 因为访问者模式对开-闭原则的支持并不好 访问者模式允许在节点中加入方法 是倾斜的开闭原则 类似抽象工厂 三 访问者模式的缺点 增加节点困难 破坏了封装因为访问者模式的缺点和复杂性 很多设计师反对使用访问者模式 个人感觉应该在了解的情况下考虑衡量选择 静态分派 动态分派 多分派 单分派   visitor模式准备 一 静态分派: 定义 发生在编译时期 分派根据静态类型信息发生 重载就是静态分派 什么是静态类型 变量被声明时的类型是静态类型      什么是动态类型 变量所引用的对象的真实类型 有两个类 BlackCat  WhiteCat都继承自Cat如下调用class Catclass WhiteCat extends Catclass BlackCat extends Catpublic class Person     public void feed(Cat cat)        System out println( feed cat );        public void feed(WhiteCat cat)        System out println( feed WhiteCat );        public void feed(BlackCat cat)        System out println( feed BlackCat );        public static void main(String[] args)         Cat wc = new WhiteCat();        Cat bc = new BlackCat();        Person p = new Person();        p feed(wc);        p feed(bc);    运行结果是:feed catfeed cat这样的结果是因为重载是静态分派 在编译器执行的 取决于变量的声明类型 因为wc  bc都是Cat所以调用的都是feed(Cat cat)的函数 二 动态分派 定义 发生在运行期 动态分派 动态的置换掉某个方法 还是上边类似的例子 class Cat    public void eat()        System out println( cat eat );    public class BlackCat extends Cat    public void eat()        System out println( black cat eat );        public static void main(String[] args)        Cat cat = new BlackCat();        cat eat();    这个时候的结果是:black cat eat这样的结果是因为在执行期发生了向下转型 就是动态分派了 三 单分派 定义 根据一个宗量的类型进行方法的选择四 多分派 定义 根据多于一个宗量的类型对方法的选择 说明 多分派其实是一系列的单分派组成的 区别的地方就是这些但分派不能分割 C++  Java都是动态单分派 静态多分派语言多分派的语言有 CLOS  Cecil访问差异类型的集合类 visitor模式入门访问差异类型的集合类 visitor模式入门本文对应代码下载这里一 问题提出访问同一类型的集合类是我们最常见的事情了 我们工作中这样的代码太常见了   Iterator ie  =  erator();    while (ie hasNext())        Person p  =  (Person)ie next();      p doWork();   这种访问的特点是集合类中的对象是同一类对象Person 他们拥有功能的方法run 我们调用的恰好是这个共同的方法 在大部份的情况下 这个是可以的 但在一些复杂的情况 如被访问者的继承结构复杂 被访问者的并不是同一类对象 也就是说不是继承自同一个根类 方法名也并不相同 例如Java GUI中的事件就是一个例子 例如这样的问题 有如下类和方法:类 PA  方法 runPA();类 PB  方法 runPB();类 PC  方法 runPC();类 PD  方法 runPD();类 PE  方法 runPE();有一个集合类ListList list = new ArrayList();list add(new PA());list add(new PB());list add(new PC());list add(new PD());list add(new PE());

cha138/Article/program/Java/gj/201311/27271

相关参考

知识大全 Java设计模式-----Visitor访问者模式

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

知识大全 在组合模式中实现访问者(Visitor)模式

在组合模式中实现访问者(Visitor)模式  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  本文

知识大全 校验值对象——应用Visitor模式和反射

校验值对象——应用Visitor模式和反射  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!概要值对象

知识大全 关于Struts2中visitor校验器的解决方法

关于Struts2中visitor校验器的解决方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 有财务模式这一概念吗

有财务模式这一概念吗?或者说财务模式有哪些呢?有财务模式这一概念:其内容具体可以分为九大模块1.损益表2.资产负债表3.现金流量表4.现金为王5.利润操控6.财务分析7.360管控8.上市策略9.兼并

股票股价模式分类

股票股价模式分类(1)固定成长模式一般来说,公司并没有把每年的盈利全部作为股利分配出去,留存的收益扩大了公司的资本金,不断增长的资本应当创造更多的盈余,进一步又引起下期股利的增长。如果公司本期的股利为

知识大全 老生常谈:策略模式

  本来园子里面已经有很多特别好的关于设计模式学习的文章但一般都是概念性的或者都是些简单实例没有用过设计模式的朋友看过之后虽然明白怎么回事了但是对于自己实际项目中何时用设计模式就不太清楚了本人借jil

知识大全 Java单例模式示例

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

知识大全 J2EE设计模式之State模式

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

知识大全 求七下英语大神解答,急

求七下英语大神解答,急!61.E62.A63.B64.D65.C71.Visitor72.quite73.Luckily74.beeen75.wrote76.teeth77.friendly78.to