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

被访问者接口:

public interface ITarget {

    public void doSomeThing();

    public void accept(IVisitor visitor);
}

访问者接口:

public interface IVisitor {
    public void visit(ITarget target);
}

被访问者:

public class TargetOne implements ITarget {

    @Override
    public void doSomeThing() {
        System.out.println("TargetOne do some thing.");

    }

    @Override
    public void accept(IVisitor visitor) {
        visitor.visit(this);
    }

}

public class TargetTwo implements ITarget {

    @Override
    public void doSomeThing() {
        System.out.println("TargetTwo do some thing.");

    }

    @Override
    public void accept(IVisitor visitor) {
        visitor.visit(this);
    }

}

访问者:

public class Visitor implements IVisitor {

    @Override
    public void visit(ITarget target) {
        target.doSomeThing();
        // 获得了ITarget的引用,可以在这里扩展ITarget接口类型的功能
        System.out.println("Visitor.visit");
        System.out.println("获得了ITarget的引用,可以在这里扩展ITarget接口类型的共用功能,而不必修改每一个ITarget接口实现类");
        System.out.println("此处也可以用来获得 ITarget 下属的某个非公开资源,而只在当前的访问者方法中使用该非公开资源,从而保证资源的安全");
    }
}

使用者:

public class Consumer {
    public static void main(String[] args) {
        ITarget targetOne = new TargetOne();
        ITarget targetTwo = new TargetTwo();

        IVisitor visitor = new Visitor();
        // visitor.visit(targetOne);
        // visitor.visit(targetTwo);

        targetOne.accept(visitor);
        targetTwo.accept(visitor);
        //两种使用方式,代表不同思路,从访问者出发以及从被访问者出发
    }
}
时间: 2024-09-20 16:05:01

设计模式(三)之访问者模式的相关文章

设计模式之四:访问者模式

目录介绍 1.访问者模式介绍 2.访问者模式定义 3.访问者模式UML图 4.访问者模式简单案例 5.访问者模式之Android源码分析 5.1 注解简单介绍 5.2 注解与访问者模式关系 5.3 注解与性能的关系 6.访问者模式之实践 6.1 介绍 6.2 编译期注解之ButterKnife 6.3 编译期注解之Dagger2 6.4 自己写个简单支持View的ID注入的工具 6.4.0 基本逻辑思路 7.注解之ButterKnife源码分析 7.0 简单工作流程 7.1 首先看看Bind注解

.Net设计模式实例之访问者模式(Visitor Pattern)

一.访问者模式简介(Brief Introduction) 表示一个作用于某对象结构中的元素操作.它使你可以在不改变各元素类的前提下定义 作用于这些元素的新操作,它把数据结构和作用于结构上的操作之间的耦合性解脱开,使的 操作结合可以相对自由地演化.优点是增加新的操作很容易,因为增加一个新的操作就意味 着增加一个新的访问者,访问者模式将有关的行为集中到一个访问对象中. 二.解决的问题(What To Solve) 访问者模式的目的是要把处理从数据结构分离出来.如果系统有比较稳定的数据结构, 又有易

举例讲解设计模式中的访问者模式在Java编程中的运用_java

访问者(Visitor)模式:封装一些作用于某种数据结构中的各元素的操作,它可以在不改变这个数据结构的前提下定义作用于这些元素的新的操作.访问者模式的结构图如下: 通过上图可以看到他有如下角色:抽象访问者(Visitor)角色:定义接口,声明一个或多个访问操作. 具体访问者(ConcreteVisitor)角色:实现抽象访问者所声明的接口,也就是抽象访问者所声明的各个访问操作. 抽象元素(Visitable)角色:声明一个接受操作,接受一个访问者对象作为一个参数. 具体元素结点(Concrete

设计模式 ( 二十 ) 访问者模式Visitor(对象行为型)

特此说明:对访问者模式理解不是特别透彻,若有误,请指正,谢谢! 1.概述 在软件开发过程中,对于系统中的某些对象,它们存储在同一个集合collection中,且具有不同的类型,而且对于该集合中的对象,可以接受一类称为访问者的对象来访问,而且不同的访问者其访问方式有所不同. 例子1:顾客在超市中将选择的商品,如苹果.图书等放在购物车中,然后到收银员处付款.在购物过程中,顾客需要对这些商品进行访问,以便确认这些商品的质量,之后收银员计算价格时也需要访问购物车内顾客所选择的商品. 此时,购物车作为一个

.NET中的设计模式三:组合模式

设计 组合模式(Composite)是一种"结构型"模式(Structural).结构型模式涉及的对象为两个或两个以上,表示对象之间的活动,与对象的结构有关. 先举一个组合模式的小小例子: 如图:系统中有两种Box:Game Box和Internet Box,客户需要了解者两个类的接口分别进行调用.为了简化客户的工作,创建了XBox类,程序代码如下: GameBox的代码: public class GameBox { public void PlayGame() { Console.

18、Python与设计模式--访问者模式

一.药房业务系统 假设一个药房,有一些大夫,一个药品划价员和一个药房管理员,它们通过一个药房管理系统组织工作流程.大夫开出药方后,药品划价员确定药品是否正常,价格是否正确:通过后药房管理员进行开药处理.该系统可以如何实现?最简单的想法,是分别用一个一个if-else-把划价员处理流程和药房管理流程实现,这样做的问题在于,扩展性不强,而且单一性不强,一旦有新药的加入或者划价流程.开药流程有些变动,会牵扯比较多的改动.今天介绍一种解决这类问题的模式:访问者模式.首先,构造药品类和工作人员类: cla

设计模式:访问者模式(Vistor)

访问者模式表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作. 访问者模式的目的是封装一些施加于某种数据结构元素之上的操作,一旦这些操作需要修改的话,接受这个操作的数据结构可以保持不变.为不同类型的元素提供多种访问操作方式,且可以在不修改原有系统的情况下增加新的操作方式,这就是访问者模式的模式动机. 访问者模式即表示一个作用于某对象结构中的各元素的操作,它使我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作. 访问者模式适用于数据结构

设计模式之禅之设计模式-访问者模式

一:访问者模式定义        --->封装一些作用于某种数据结构中的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作. 二:访问者模式角色● Visitor--抽象访问者        抽象类或者接口,声明访问者可以访问哪些元素,具体到程序中就是visit方法的参数定义哪些对象是可以被访问的.● ConcreteVisitor--具体访问者        它影响访问者访问到一个类后该怎么干,要做什么事情.● Element--抽象元素        接口或者抽象类,声

设计模式之访问者模式

        刚刚学完设计模式的访问者模式(编译器模式),这里就对该模式进行了总结与分析. 一.产生原因         这里存在一个这样的问题:如果某系统已经完成了一个类层次并提供了满足需求的所有接口,现在要增加新的需求,我们需要怎么做?         可能你会采用增加该需求并把整个层次结构统统修改一遍.然而如果需求变动会不停的发生,而且需求的任何变动都会让整个结构统统修改一遍,此时你会怎么做呢?        所以,我们现在需要对这个系统结构进行重构,访问者模式也许就是你解决上面问题最好

Java设计模式(二十一)----访问者模式

访问者模式 一.概述 1.定义 2.分派的概念 3.分派的类型 4.双重分派 二.结构 三.具体案例 一.概述 1.定义 访问者模式的目的是封装一些施加于某种数据结构元素之上的操作.一旦这些操作需要修改的话,接受这个操作的数据结构则可以保持不变. 2.分派的概念 变量被声明时的类型叫做变量的静态类型(Static Type),有些人又把静态类型叫做明显类型(Apparent Type):而变量所引用的对象的真实类型又叫做变量的实际类型(Actual Type).比如: List list = n