Files
notes_estom/Go/DesignPattern/bridging/bridging.go
2021-09-03 05:34:34 +08:00

73 lines
1.5 KiB
Go

package bridging
import "fmt"
//桥接模式:分离抽象部分和是实现部分,使得两部分可以独立变化
//桥接模式类似于策略模式,区别于策略模式封装一些列算法,使得算法可以相互替换
//将抽象部分SendMessage()与具体的实现部分Send()分离
//抽象部分:SendMessage
type AbstractMessage interface {
SendMessage(text, to string)
}
//实现部分:Send
type MessageImplementer interface {
Send(text, to string)
}
//via sms
func ViaSMS() MessageImplementer {
return &MessageSMS{}
}
type MessageSMS struct {
}
func (*MessageSMS) Send(text, to string) {
fmt.Printf("send %s to %s via SMS", text, to)
}
//via email
func ViaEmail() MessageImplementer {
return &MessageEmail{}
}
type MessageEmail struct {
}
func (MessageEmail) Send(text, to string) {
fmt.Printf("send %s to via Email", text, to)
}
//New commonMessage,method can be SMS or email
func NewCommonMessage(method MessageImplementer) *CommonMessage {
return &CommonMessage{
method: method,
}
}
type CommonMessage struct {
method MessageImplementer
}
func (c *CommonMessage) SendMessage(text, to string) {
c.method.Send(text, to)
}
//New UrgencyMessage,method can be SMS or email
func NewUrgencyMessage(method MessageImplementer) *UrgencyMessage {
return &UrgencyMessage{
method: method,
}
}
type UrgencyMessage struct {
method MessageImplementer
}
func (u *UrgencyMessage) SendMessage(text, to string) {
u.method.Send(fmt.Sprintf("[Urgency] %s", text), to)
}