资讯专栏INFORMATION COLUMN

访问者模式(Visitor)

Bryan / 635人阅读

摘要:访问者模式一访问者模式定义表示一个作用于某对象结构中的各元素操作它使你可以在不改变各元素类的前提下,定义作用于这些元素的新操作角色抽象访问者对象具体访问者对象抽象元素对象具体元素对象结构对象二具体实现创建抽象元素对象创建具体元素对象创建抽象

访问者模式

一. 访问者模式 1.1 定义

表示一个作用于某对象结构中的各元素操作.它使你可以在不改变各元素类的前提下,定义作用于这些元素的新操作.

1.2 角色

抽象访问者对象(Visit).

具体访问者对象(ConcreteVisit).

抽象元素对象(Element).

具体元素对象(ConcreteElement).

结构对象(ObjectStructure).

二. 具体实现 2.1 创建抽象元素对象
    public interface IElement {
        void accept(IVisitor visitor);
    }
2.2 创建具体元素对象
    public class ElementA implements IElement {
        @Override
        public void accept(IVisitor visitor) {
            visitor.visit(this);
        }
    }
    public class ElementB implements IElement {
        @Override
        public void accept(IVisitor visitor) {
            visitor.visit(this);
        }
    }
2.3 创建抽象访问者对象
    public interface IVisitor {
        void visit(ElementA element);
        void visit(ElementB element);
    }
2.4 创建具体访问者对象
    public class Visitor implements IVisitor {
        @Override
        public void visit(ElementA element) {
            System.out.println("ElementA visit ... ");
        }
        @Override
        public void visit(ElementB element) {
            System.out.println("ElementB visit ... ");
        }
    }
2.5 调用
    public static void main(String[] args) {
        IElement element = new ElementA();
        IVisitor visitor = new Visitor();
        element.accept(visitor);
        element = new ElementB();
        element.accept(visitor);
    }
2.6 输出
    ElementA visit ... 
    ElementB visit ... 
三. 优缺点 3.1 优点

良好的扩展性.

灵活性.

3.2 缺点

增加新的元素类困难.

四. 源码
    https://github.com/Seasons20/DisignPattern.git

END

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/69748.html

相关文章

  • 理解设计模式

    摘要:适配器模式将一个类的接口转换成客户希望的另外一个接口。代理模式为其他对象提供一种代理以控制对这个对象的访问。如果用来解决排序问题不符合开闭原则,添加策略需要修改代码用策略模式将策略抽象成接口,不同的策略实现该接口。 简单工厂、工厂方法、抽象工厂 简单工厂 通过定义多个factory.produceXXX()方法,或者通过向factory.produce(type)传递type参数来生成...

    saucxs 评论0 收藏0
  • PHP设计模式访问者模式

    摘要:访问者模式解决的问题在我们的代码编写过程当中,经常需要对一些类似的对象添加一些的代码,我们以一个计算机对象打印组成部分为例来看下抽象基类获取名称类内存类键盘类计算机类循环打印各个组成部分这个时候上面的代码看上去好像很完美的样子,但是问 访问者模式解决的问题 在我们的代码编写过程当中,经常需要对一些类似的对象添加一些的代码,我们以一个计算机对象打印组成部分为例来看下: /** ...

    用户83 评论0 收藏0
  • 「译」什么是抽象语法树

    摘要:原文地址原文作者是抽象语法树的缩写词,表示编程语言的语句和表达式中生成的。解释器将会遍历该数组并执行里面的语句。,,,是一组相关的类,每一个类都需要携带方法以使解释器获得它们的值或者对它们求值。 原文地址:What is an Abstract Syntax Tree 原文作者:Chidume Nnamdi showImg(https://segmentfault.com/img...

    JouyPub 评论0 收藏0
  • php 设计模式访问者模式

    摘要:概念访问者模式实际上是让外部类能够获取树形结构的每个节点的对象,对每个对象进行操作的模式,他能让我们在不改动原有树形结构的基础上扩展功能。 概念: 访问者模式实际上是让外部类能够获取树形结构的每个节点的对象,对每个对象进行操作的模式, 他能让我们在不改动原有树形结构的基础上扩展功能。比如统计等等 在这种模式下,必须有的几个要素: 1: 具体的元素对象, 访问者实际要访问的位置(即节...

    zzir 评论0 收藏0
  • 行为型模式

    摘要:但是发出者并不清楚到底最终那个对象会处理该请求,所以,责任链模式可以实现,在隐瞒客户端的情况下,对系统进行动态的调整。因为访问者模式使得算法操作增加变得容易。访问者模式将有关行为集中到一个访问者对象中,其改变不影响系统数据结构。 总体分为3大类:创建型模式 (5种):工厂方法、抽象工厂、单例、建造者、原型结构型模式(7种):适配器、装饰器、代理、外观、桥接、组合、享元行为型模式(11种...

    why_rookie 评论0 收藏0

发表评论

0条评论

Bryan

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<