zoukankan      html  css  js  c++  java
  • 设计模式之访问者模式

    参考博文:https://www.cnblogs.com/jiaoyiping/p/9769554.html   侵权删除

    2019-06-28  11:22:29

    访问者模式  Visitor

    分派概念的介绍:(访问者模式中使用了双分派)

      静态分派:发生在编译时期,分派根据静态类型信息发生。例如,方法重载就是静态分派。

      动态分派:发生在运行时期,动态分派动态地置换掉某个方法。例如,抽象父类引用指向具体子类。

    什么是访问者模式:封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改的话,接受这个操作的数据结构则可以保持不变。(即在不改变数据基本结构的前提下扩展功能)

    适用性:对象结构稳定的前提下,扩展功能。

    访问者模式最大的限制:要求对象结构稳定。(不然会导致Visitor抽象类变化,抽象类变化不符合设计原则)。

    访问者模式的基本类图

    访问者模式的基本成员

      抽象访问者(Visitor)角色:声明了一个或者多个方法操作,形成所有的具体访问者角色必须实现的接口。

      具体访问者(ConcreteVisitor)角色:实现抽象访问者所声明的接口,也就是抽象访问者所声明的各个访问操作。

      抽象节点(Element)角色:声明一个接受操作,接受一个访问者对象作为一个参数。

      具体节点(ConcreteElement)角色:结构对象中的具体单元,实现了抽象节点所规定的接受操作。

      结构对象(ObjectStructure)角色:具体单元的容器,有如下的责任,可以遍历结构中的所有元素;如果需要,提供一个高层次的接口让访问者对象可以访问每一个元素;如果需要,可以设计成一个复合对象或者一个聚集,如List或Set。

    访问者模式的基本代码要点

      两次分派:第一次分派ConcreteElement,第二次分派ConcreteVisitor。

      扩展功能的方式,增加Visitor 子类。

    访问者模式的基本代码:(参考博文)

    public class Client {
        public static void main(String[] args) {
            //创建一个结构对象
            ObjectStructure os = new ObjectStructure();
            //给结构增加一个节点
            os.add(new NodeA());
            //给结构增加一个节点
            os.add(new NodeB());
          
            Visitor visitor = new VisitorA();   //创建一个访问者
    
            os.action(visitor); //两次分派; 先找到具体的Node对象,然后找到具体的visitor,然后执行具体visitor 中的代码
        }
    }

      

  • 相关阅读:
    脚本
    vim 马哥
    动态删除节点
    动态插入节点
    动态创建内容
    获取html元素内容
    设置元素的属性
    获取元素的属性
    jquery中:input和input的区别
    jQuery选择器总结
  • 原文地址:https://www.cnblogs.com/youzoulalala/p/11101797.html
Copyright © 2011-2022 走看看