目录
桥接模式(Bridge Pattern)
桥接模式的核心角色
优缺点
使用场景
代码实现
桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类,这两种类型的类可被结构化改变而互不影响。桥接模式的目的是将抽象与实现分离,使它们可以独立地变化,该模式通过将一个对象的抽象部分与它的实现部分分离,使它们可以独立地改变。它通过组合的方式,而不是继承的方式,将抽象和实现的部分连接起来。
(1)优点:
(2)缺点:桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。
package main
import "fmt"
// 消息发送接口
type MessageSend interface {
send(msg string)
}
// 短信消息
type SMS struct {
}
func (s *SMS) send(msg string) {
fmt.Println("sms 发送的消息内容为: " + msg)
}
// 邮件消息
type Email struct {
}
func (e *Email) send(msg string) {
fmt.Println("email 发送的消息内容为: " + msg)
}
// AppPush消息
type AppPush struct {
}
func (a *AppPush) send(msg string) {
fmt.Println("appPush 发送的消息内容为: " + msg)
}
// 站内信消息
type Letter struct {
}
func (l *Letter) send(msg string) {
fmt.Println("站内信 发送的消息内容为: " + msg)
}
// 用户触达父类,包含触达方式数组messageSends
type Touch struct {
messageSends []MessageSend
}
// 触达方法,调用每一种方式进行触达
func (t *Touch) do(msg string) {
for _, s := range t.messageSends {
s.send(msg)
}
}
// 紧急消息做用户触达
type TouchUrgent struct {
base Touch
}
// 紧急消息,先从db中获取各种信息,然后使用各种触达方式通知用户
func (t *TouchUrgent) do(msg string) {
fmt.Println("touch urgent 从db获取接收人等信息")
t.base.do(msg)
}
// 普通消息做用户触达
type TouchNormal struct {
base Touch
}
// 普通消息,先从文件中获取各种信息,然后使用各种触达方式通知用户
func (t *TouchNormal) do(msg string) {
fmt.Println("touch normal 从文件获取接收人等信息")
t.base.do(msg)
}
func main() {
//触达方式
sms := &SMS{}
appPush := &AppPush{}
letter := &Letter{}
email := &Email{}
//根据触达类型选择触达方式
fmt.Println("-------------------touch urgent")
touchUrgent := TouchUrgent{
base: Touch{
messageSends: []MessageSend{sms, appPush, letter, email},
},
}
touchUrgent.do("urgent情况")
fmt.Println("-------------------touch normal")
touchNormal := TouchNormal{ //
base: Touch{
messageSends: []MessageSend{sms, appPush, letter, email},
},
}
touchNormal.do("normal情况")
}