mirror of
https://github.com/Estom/notes.git
synced 2026-02-12 06:46:22 +08:00
go知识重新整理
This commit is contained in:
72
Go/DesignPattern/bridging/bridging.go
Normal file
72
Go/DesignPattern/bridging/bridging.go
Normal file
@@ -0,0 +1,72 @@
|
||||
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)
|
||||
}
|
||||
27
Go/DesignPattern/bridging/bridging_test.go
Normal file
27
Go/DesignPattern/bridging/bridging_test.go
Normal file
@@ -0,0 +1,27 @@
|
||||
/**
|
||||
* @Author:zhoutao
|
||||
* @Date:2020/12/12 上午9:32
|
||||
* @Desc:
|
||||
*/
|
||||
|
||||
package bridging
|
||||
|
||||
func ExampleCommonSMS() {
|
||||
m := NewCommonMessage(ViaSMS())
|
||||
m.SendMessage("sending by sms:have a drink", "boo")
|
||||
}
|
||||
|
||||
func ExampleCommonEmail() {
|
||||
m := NewCommonMessage(ViaEmail())
|
||||
m.SendMessage("sending by email:have a drink", "boo")
|
||||
}
|
||||
|
||||
func ExampleUrgencySMS() {
|
||||
m := NewUrgencyMessage(ViaSMS())
|
||||
m.SendMessage("have a drink", "boo")
|
||||
}
|
||||
|
||||
func ExampleUrgencyEmail() {
|
||||
m := NewUrgencyMessage(ViaEmail())
|
||||
m.SendMessage("have a drink", "boo")
|
||||
}
|
||||
Reference in New Issue
Block a user