Swift设计模式之访问者模式
发布时间:2020-12-14 06:59:56 所属栏目:百科 来源:网络整理
导读:转自 Swift设计模式 原文 Design-Patterns-In-Swift // 访问者模式 // 百度百科:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作 // 设计模式分类:行为型模式 /** * 星球访问者接口 */ protocol
转自
原文
// 访问者模式
// 百度百科:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作
// 设计模式分类:行为型模式
/** * 星球访问者接口 */
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)
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- c# – Windows.Automation中的LegacyIAccessible
- 正则表达式基本语法
- 记一次800多万XML文本文件预处理经历
- 虽然写管理类软件非常依赖数据库,但是建议您不要过度依赖数
- Vue学习之路8-v-on指令学习简单事件绑定之属性
- 几个DataSet数据导出到XML Word Excel TXT HTML的函数
- 如何在XML中转义&符号,使它们在HTML中呈现为实体?
- c# – NHibernate生成带有错误连接的SQL
- ruby-on-rails – 如何从Rails的现有Time.zone创建Ruby Dat
- ruby-on-rails – 将多个旧数据库迁移到一个Rails应用程序中