加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Swift设计模式之访问者模式

发布时间:2020-12-14 06:59:56 所属栏目:百科 来源:网络整理
导读:转自 Swift设计模式 原文 Design-Patterns-In-Swift // 访问者模式 // 百度百科:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作 // 设计模式分类:行为型模式 /** * 星球访问者接口 */ protocol

转自

  • Swift设计模式

原文

  • Design-Patterns-In-Swift
// 访问者模式
// 百度百科:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作
// 设计模式分类:行为型模式

/** * 星球访问者接口 */
protocol PlanetVisitor {
    func visit(planet: Earth)
    func visit(planet: Mars)
    func visit(planet: Venus)
}

/** * 行星类 */
protocol Planet {
    func accept(visitor: PlanetVisitor)
}

/// 地球
class Earth: Planet {
    func accept(visitor: PlanetVisitor) { visitor.visit(self) }
}

/// 火星
class Mars: Planet {
    func accept(visitor: PlanetVisitor) { visitor.visit(self) }
}

/// 金星
class Venus: Planet {
    func accept(visitor: PlanetVisitor) { visitor.visit(self) }
}

/// 具体访问者类
class NameVisitor: PlanetVisitor {
    var name = ""

    func visit(planet: Earth)  { name = "Earth" }
    func visit(planet: Mars) { name = "Mars" }
    func visit(planet: Venus)  { name = "Venus" }
}

let planets: [Planet] = [Earth(),Mars(),Venus()]

let names = planets.map { (planet: Planet) -> String in
    let visitor = NameVisitor()
    planet.accept(visitor)
    return visitor.name
}

print(names)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读