mirror of
https://github.com/Estom/notes.git
synced 2026-02-07 20:44:38 +08:00
73 lines
1.5 KiB
Go
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)
|
|
}
|