美文网首页
三十三、访问者模式

三十三、访问者模式

作者: LeeLeCoder | 来源:发表于2017-10-20 16:15 被阅读0次

1. 何为访问者模式

访问者模式是指封装某些作用于某种数据结构中各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。

访问者模式:表示一个作用于某对象结构中的各元素的操作。它让我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作。

访问者模式模式图

Visitor(访问者) :为该对象结构中 ConcreteElement的每一个类声明一个 Visit操作.该操作的名字和特征标识了发送 Visit请求给该访问者的那个类.这使得访问者可以确定正被访问元素 的具体的类.这样访问者就可以通过该元素的特定接口直接访问它.

ConcreteVisitor(具体访问者): 实现每个由 Visitor声明的操作.每个操作实现本算法的一部分,而该算法片断乃是对应于结构中对象的类。ConcreteVisitor为该算法提供了上下文并存储它的局部状态.这一状态常常在遍历该结构的过程中累积结果.

Element(元素) :定义一个Accept操作,它以一个访问者为参数。

ConcreteElement(具体元素) :实现Accept操作,该操作以一个访问者为参数.

ObjectStructure(对象结构) :能枚举它的元素,可以提供一个高层的接口以允许该访问者访问它的元素, 可以是一个复合(参见Composite组合模式)或是一个集合,如一个列表或一个无序集合.

2. 何时使用访问者模式

在以下场景,可以使用访问者模式:

  • 一个复杂的对象结构包含很多其他对象,他们有不同的接口(比如组合体),但是想对这些对象实施一些依赖于其具体类型的操作。
  • 需要对一个组合结构中的对象进行很多不相关的操作,但是不想让这些操作“污染”这些对象类。可以将相关的操作集中起来,定义在一个访问者类中,并在需要在访问者中定义的操作时使用它。
  • 定义复杂结构的类很少做修改,单经常需要向其添加新的操作。

3. 代码演示

class Person {
    func accept(visitor: PlaceVisitor) {

    }
}

class Boss: Person {
    override func accept(visitor: PlaceVisitor) {
        visitor.visitor(boss: self)
    }
}

class Employee: Person {
    override func accept(visitor: PlaceVisitor) {
        visitor.visitor(emplyee: self)
    }
}

// 定义访问行为
class PlaceVisitor {
    func visitor(boss: Boss) {
        
    }
    
    func visitor(emplyee: Employee) {
        
    }
}

class HourseVisitor: PlaceVisitor {
    override func visitor(boss: Boss) {
        print("老板在家埋头工作")
    }
    
    override func visitor(emplyee: Employee) {
        print("员工在家看电视聊天")
    }
}

class OfficeVisitor: PlaceVisitor {
    override func visitor(boss: Boss) {
        print("老板在办公室进行商务拓展")
    }
    
    override func visitor(emplyee: Employee) {
        print("员工在办公室认真工作")
    }
}

let boss: Boss = Boss()
let employee: Employee = Employee()

let houseVisitor: PlaceVisitor = HourseVisitor()
let officeVisitor: PlaceVisitor = OfficeVisitor()

boss.accept(visitor: houseVisitor)
employee.accept(visitor: houseVisitor)

boss.accept(visitor: officeVisitor)
employee.accept(visitor: officeVisitor)

演示结果:

老板在家埋头工作
员工在家看电视聊天
老板在办公室进行商务拓展
员工在办公室认真工作

相关文章

  • 设计模式之访问者模式(visitor模式)

    引入访问者模式 访问者模式的实例 访问者模式分析 引入访问者模式 Visitor是访问者的意思。数据结构中保存着元...

  • 三十三、访问者模式

    1. 何为访问者模式 访问者模式是指封装某些作用于某种数据结构中各元素的操作,它可以在不改变数据结构的前提下定义作...

  • 第5章 -行为型模式-访问者模式

    一、访问者模式的简介 二、访问者模式的优缺点 三、访问者模式的实例

  • 访问者模式

    一、访问者模式介绍 二、访问者模式代码实例

  • [Android]设计模式-访问者模式

    [Android]设计模式-访问者模式 访问者模式 Visitor 【备注】只用于个人收藏

  • 行为型模式:访问者模式

    文章首发:行为型模式:访问者模式 十一大行为型模式之十一:访问者模式。 简介 姓名 :访问者模式英文名 :Visi...

  • 设计模式[23]-访问者模式-Visitor Pattern

    1.访问者模式简介 访问者模式(Visitor Pattern)模式是行为型(Behavioral)设计模式,提供...

  • 访问者模式

    《java与模式》中是这样描述访问者模式作用的: 访问者模式是对象的行为模式。访问者模式的目的是封装一些施加于某种...

  • 设计模式--访问者模式

    目录 本文的结构如下: 引言 什么是访问者模式 模式的结构 典型代码 访问者模式中的伪动态双分派 代码示例 访问者...

  • 访问者模式

    访问者模式属于行为型模式。访问者模式是一种将数据结构和数据操作分离的设计模式。访问者模式比较复杂,而且实际使用的地...

网友评论

      本文标题:三十三、访问者模式

      本文链接:https://www.haomeiwen.com/subject/drhesxtx.html