桥接模式

一个类存在多个独立变化维度,我们通过组合的方式让多个维度可以独立进行扩展。桥接模式的目的是将抽象部分与实现部分解耦,使它们可以独立地变化

举例:实现一个告警系统:告警系统含有多个告警类别和多种告警方式,告警类别和告警方式之间可以任意对应使用,方便灵活调整。也就是说,告警方式和告警类别可以独立变化,因为这两个没有依赖关系。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
// @author cold bin
// @date 2023/9/2

package bridge

import "fmt"

// AlertMethod 告警方式的接口
type AlertMethod interface {
	SendAlert(message string)
}

// 具体的告警方式

type EmailAlert struct{}

func (e *EmailAlert) SendAlert(message string) {
	fmt.Println("通过邮件发送告警:", message)
}

type SMSAlert struct{}

func (s *SMSAlert) SendAlert(message string) {
	fmt.Println("通过短信发送告警:", message)
}

// AlertLevel 告警级别的接口
type AlertLevel interface {
	SetAlertMethod(method AlertMethod)
	Alert(message string)
}

// 具体的告警级别

type WarningAlert struct {
	method AlertMethod
}

func (w *WarningAlert) SetAlertMethod(method AlertMethod) {
	w.method = method
}

func (w *WarningAlert) Alert(message string) {
	w.method.SendAlert("[Warning] " + message)
}

type ErrorAlert struct {
	method AlertMethod
}

func (e *ErrorAlert) SetAlertMethod(method AlertMethod) {
	e.method = method
}

func (e *ErrorAlert) Alert(message string) {
	e.method.SendAlert("[Error] " + message)
}