`

【转】设计模式——访问者模式(Visitor)

 
阅读更多

访问者模式把数据结构和作用于结构上的操作解耦合,使得操作集合可相对自由地演化。

访问者模式适用于数据结构相对稳定算法又易变化的系统。因为访问者模式使得算法操作增加变得容易。

若系统数据结构对象易于变化,经常有新的数据对象增加进来,则不适合使用访问者模式。

访问者模式的优点是增加操作很容易,因为增加操作意味着增加新的访问者。访问者模式将有关行为集中到一个访问者对象中,其改变不影响系统数据结构。

其缺点就是增加新的数据结构很困难。

 

简单来说,访问者模式就是一种分离对象数据结构与行为的方法,通过这种分离,可达到为一个被访问者动态添加新的操作而无需做其它的修改的效果。

▲一个Visitor类,存放要访问的对象:

public interface Visitor {

public void visit(Subject sub);

}

public class MyVisitor implements Visitor {

 

 

@Override

public void visit(Subject sub) {

System.out.println("visit the subject:"+sub.getSubject());

}

}

 

▲Subject类,accept方法,接受将要访问它的对象,getSubject()获取将要被访问的属性:

public interface Subject {

public void accept(Visitor visitor);

public String getSubject();

}

public class MySubject implements Subject {

 

 

@Override

public void accept(Visitor visitor) {

visitor.visit(this);

}

 

 

@Override

public String getSubject() {

return "love";

}

}

 

▲测试:

public class Test {

 

 

public static void main(String[] args) {

 

Visitor visitor = new MyVisitor();

Subject sub = new MySubject();

sub.accept(visitor);

}

}

 

▲输出:visit the subject:love

该模式适用场景:如果我们想为一个现有的类增加新功能,不得不考虑几个事情:

1、新功能会不会与现有功能出现兼容性问题?

2、以后会不会再需要添加?

3、如果类不允许修改代码怎么办?

面对这些问题,最好的解决方法就是使用访问者模式,访问者模式适用于数据结构相对稳定的系统,把数据结构和算法解耦

--------------------- 

作者:panzihao_beijing 

来源:CSDN 

原文:https://blog.csdn.net/PanZiHao_BeiJing/article/details/80429990 

版权声明:本文为博主原创文章,转载请附上博文链接!

分享到:
评论

相关推荐

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

    访问者模式是一种行为设计模式,它使你可以在不修改对象结构的情况下,为对象添加新的操作。这种模式的核心在于将数据结构与对这些数据的操作解耦,使得增加新的操作变得容易,同时也允许独立地改变元素类和访问者类...

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

    它通过引入一个新的角色——访问者,允许在不修改原有对象结构的基础上,增加新的功能。 **访问者模式的角色:** 1. **Element(元素)**:元素是对象结构中的基本组成单元,它可以是一个简单的对象或复杂的对象...

    设计模式-Java语言中的应用(pdf)

    行为型模式如策略(Strategy)、观察者(Observer)、访问者(Visitor)和模板方法(Template Method),关注对象之间的交互和职责分配。 在Java中,设计模式的应用广泛且深入。例如,单例模式在系统配置、线程池等...

    C#面向对象设计模式纵横谈(24):(行为型模式) Visitor 访问者模式

    在本篇文章中,我们将深入探讨面向对象设计模式中的一个非常重要的模式——**Visitor(访问者)模式**。此模式属于行为型模式的一种,主要应用于在不修改现有类的情况下向其添加新功能。这对于保持代码的灵活性和可...

    设计模式可复用面向对象软件的基础.zip

    5.11 VISITOR(访问者)—对象行为型 模式 218 5.12 行为模式的讨论 228 5.12 1 封装变化 228 5.12.2 对象作为参数 228 5.12.3 通信应该被封装还是被分布 229 5.12.4 对发送者和接收者解耦 229 5.12.5 总结 231 第6...

    《java设计模式》课后习题模拟试题解答——刘伟.zip

    3. **行为型模式**:包括策略(Strategy)、模板方法(Template Method)、观察者(Observer)、迭代器(Iterator)、访问者(Visitor)、责任链(Chain of Responsibility)、命令(Command)、备忘录(Memento)、...

    23种 设计模式---面向对象的基本原则

    - 访问者模式(Visitor):表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 这些设计模式不仅在PHP中适用,也是跨语言的编程思想,可以帮助开发者...

    C++设计模式--基于Qt4开源跨平台开发框架

    行为型模式如观察者模式(Observer)、策略模式(Strategy)和访问者模式(Visitor),关注对象之间的交互和责任分配。 在C++中,设计模式的应用通常涉及到面向对象编程的特性,如继承、封装和多态。Qt4框架则为...

    设计模式代码——c#

    C#设计模式(23种设计模式) 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4. 工厂方法模式...22. 访问者模式(Visitor Pattern) 23. 状态模式(State Pattern)

    设计模式精解——GoF23中设计模式解析

    ### 设计模式精解——GoF23中设计模式解析 #### 重要性与起源 设计模式是软件工程领域的一项重要研究,它提供了一系列解决常见软件设计问题的模板。GoF23指的是由Erich Gamma、Richard Helm、Ralph Johnson和John ...

    设计模式精解-GoF 23种设计模式解析.pdf

    - **3.8 Visitor模式**:访问者模式表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 - **3.9 Chain of Responsibility模式**:职责链模式允许请求...

    设计模式精解-GoF 23种设计模式解析附C++.pdf

    ### 设计模式精解——GoF 23种设计模式解析及C++实现 #### 0. 引言 设计模式作为面向对象编程的核心组成部分,是软件开发者在长期实践中总结出来的最佳实践。通过深入理解这些设计模式,我们可以更好地进行面向...

    X-gen PPT下载——《研磨设计模式》 实战

    包括责任链模式(Chain of Responsibility)、命令模式(Command)、解释器模式(Interpreter)、迭代器模式(Iterator)、中介者模式(Mediator)...Strategy)、模板方法模式(Template Method)和访问者模式(Visitor)...

    设计模式PPT---25种设计模式详解

    10. 访问者模式(Visitor):在不改变类结构的情况下,为对象添加新的操作。 这份PPT涵盖了设计模式的全貌,对于初学者来说,是一个很好的学习资源。通过深入学习这些模式,开发者可以更好地理解和应用面向对象设计...

    design-pattern-java.pdf

    模板方法模式-Template Method Pattern 模板方法模式深度解析(一) 模板方法模式深度解析(二) 模板方法模式深度解析(三) 访问者模式-Visitor Pattern 操作复杂对象结构——访问者模式(一) 操作复杂对象结构...

    设计模式精解-GoF 23种设计模式解析附C++实现源码.pdf

    - **3.8 Visitor模式**:访问者模式定义一个作用于某对象结构中的各元素的操作。 - **3.9 Chain of Responsibility模式**:职责链模式允许多个处理者处理请求。 - **3.10 Iterator模式**:迭代器模式提供一种方法...

    设计模式C++版

    8. Visitor模式,访问者模式,表示一个作用于某对象结构中的各元素的操作。 9. ChainofResponsibility模式,责任链模式,使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。 10. Iterator...

    设计模式C++版(pdf版)

    ### 设计模式精解——GoF 23种设计模式解析及C++实现源码 #### 引言 设计模式是软件工程领域中一个极为重要的概念,它代表着一系列被广泛接受的解决特定问题的方法。GoF(Gang of Four)所提出的23种设计模式更是...

Global site tag (gtag.js) - Google Analytics