Go的访问者模式

简介: 访问者模式是一种行为设计模式,它允许在不修改现有类的情况下向现有类层次结构中添加新操作。它通过引入一个独立的访问者对象,将算法与对象分离。

在访问者模式中,有三个关键组件:

  1. 访问者(Visitor):它是一个接口或抽象类,声明了对对象层次结构中每个类的访问方法。每个访问方法对应于可以在对象上执行的特定操作。
  2. 具体访问者(Concrete Visitor):它是实现了访问者接口的具体类,提供了对对象的具体操作。
  3. 元素(Element):它是对象层次结构中的类,定义了接受访问者的接口。
  4. 具体元素(Concrete Element):它是实现了元素接口的具体类,提供了接受访问者的具体实现。

访问者模式的核心思想是将算法的操作封装在访问者对象中,通过访问者对象来访问不同的元素对象。这样,当需要增加新的操作时,只需添加新的访问者对象,而无需修改现有的元素类。

以下是一个简单的使用Go语言实现的访问者模式示例,展示了对不同形状(圆形、矩形)进行面积计算的操作。在这个示例中,访问者接口 ShapeVisitor 声明了对不同形状的访问方法,具体访问者 AreaCalculator 实现了这些方法。元素接口 Shape 定义了接受访问者的方法,具体元素 Circle 和 Rectangle 实现了这个接口,并提供了具体的实现。


package main

import "fmt"

// ShapeVisitor 访问者接口
type ShapeVisitor interface {
    VisitCircle(circle *Circle)
    VisitRectangle(rectangle *Rectangle)
}

// AreaCalculator 具体访问者
type AreaCalculator struct {
}

func (a *AreaCalculator) VisitCircle(circle *Circle) {
    area := 3.14 * circle.radius * circle.radius
    fmt.Printf("圆形的面积为:%.2f\n", area)
}

func (a *AreaCalculator) VisitRectangle(rectangle *Rectangle) {
    area := rectangle.length * rectangle.width
    fmt.Printf("矩形的面积为:%.2f\n", area)
}

// Shape 元素接口
type Shape interface {
    Accept(visitor ShapeVisitor)
}

// Circle 具体元素
type Circle struct {
    radius float64
}

func (c *Circle) Accept(visitor ShapeVisitor) {
    visitor.VisitCircle(c)
}

// Rectangle 具体元素
type Rectangle struct {
    length float64
    width  float64
}

func (r *Rectangle) Accept(visitor ShapeVisitor) {
    visitor.VisitRectangle(r)
}

func main() {
    areaCalculator := &AreaCalculator{}

    circle := &Circle{radius: 5}
    circle.Accept(areaCalculator)

    rectangle := &Rectangle{length: 4, width: 6}
    rectangle.Accept(areaCalculator)
}
目录
相关文章
|
3月前
|
设计模式 算法 Go
|
6月前
|
设计模式 Go
[设计模式 Go实现] 行为型~访问者模式
[设计模式 Go实现] 行为型~访问者模式
|
设计模式 Kubernetes 监控
Go编程模式 - 8-装饰、管道和访问者模式
装饰、管道和访问者模式的使用频率不高,但在特定场景下会显得很酷
34 0
|
设计模式 算法 编译器
Go语言实现设计模式之访问者模式
本文将详细介绍Go语言中的访问者模式的概念、用途和实现方法。访问者模式是一种行为型设计模式,它允许你将算法从对象结构中分离出来,从而使算法可以独立于对象而变化。我们将通过开发中的示例和生活中的场景来说明访问者模式的应用场景,并给出相应的代码示例和输出结果。
155 1
|
设计模式 存储 算法
Go设计模式(24)-访问者模式
访问者模式理解比较困难。可以认为对象开了一扇门,用来接收访问者,然后访问者便可在对象内部操作对象。简单来说,对象对访问者进行了授权。这样做能够实现对象和操作的解耦,职责更加单一。对象只管理自身,操作功能安置在访问者中。
|
5天前
|
存储 安全 算法
Go语言是如何支持多线程的
【10月更文挑战第21】Go语言是如何支持多线程的
101 72
|
5天前
|
安全 大数据 Go
介绍一下Go语言的并发模型
【10月更文挑战第21】介绍一下Go语言的并发模型
24 14
|
1天前
|
编译器 Go
go语言编译选项
【10月更文挑战第17天】
9 5
|
4天前
|
安全 Go 开发者
go语言并发模型
【10月更文挑战第16天】
18 8
|
1天前
|
缓存 安全 Java
go语言 代码优化
【10月更文挑战第17天】
11 4