Java學生管理系統學習筆記
阿新 • • 發佈:2020-12-19
1 package bridging 2 3 import "fmt" 4 5 //橋接模式:分離抽象部分和是實現部分,使得兩部分可以獨立變化 6 //橋接模式類似於策略模式,區別於策略模式封裝一些列演算法,使得演算法可以相互替換 7 8 //將抽象部分SendMessage()與具體的實現部分Send()分離 9 10 //抽象部分:SendMessage 11 type AbstractMessage interface { 12 SendMessage(text, to string) 13 } 14 15 //實現部分:Send 16 type MessageImplementer interface{ 17 Send(text, to string) 18 } 19 20 //via sms 21 func ViaSMS() MessageImplementer { 22 return &MessageSMS{} 23 } 24 25 type MessageSMS struct { 26 } 27 28 func (*MessageSMS) Send(text, to string) { 29 fmt.Printf("send %s to %s via SMS", text, to) 30 } 31 32 //via email 33 func ViaEmail() MessageImplementer {34 return &MessageEmail{} 35 } 36 37 type MessageEmail struct { 38 } 39 40 func (MessageEmail) Send(text, to string) { 41 fmt.Printf("send %s to via Email", text, to) 42 } 43 44 //New commonMessage,method can be SMS or email 45 func NewCommonMessage(method MessageImplementer) *CommonMessage {46 return &CommonMessage{ 47 method: method, 48 } 49 } 50 51 type CommonMessage struct { 52 method MessageImplementer 53 } 54 55 func (c *CommonMessage) SendMessage(text, to string) { 56 c.method.Send(text, to) 57 } 58 59 //New UrgencyMessage,method can be SMS or email 60 func NewUrgencyMessage(method MessageImplementer) *UrgencyMessage { 61 return &UrgencyMessage{ 62 method: method, 63 } 64 } 65 66 type UrgencyMessage struct { 67 method MessageImplementer 68 } 69 70 func (u *UrgencyMessage) SendMessage(text, to string) { 71 u.method.Send(fmt.Sprintf("[Urgency] %s", text), to) 72 }
1 /** 2 * @Author:zhoutao 3 * @Date:2020/12/12 上午9:32 4 * @Desc: 5 */ 6 7 package bridging 8 9 func ExampleCommonSMS() { 10 m := NewCommonMessage(ViaSMS()) 11 m.SendMessage("sending by sms:have a drink", "boo") 12 } 13 14 func ExampleCommonEmail() { 15 m := NewCommonMessage(ViaEmail()) 16 m.SendMessage("sending by email:have a drink", "boo") 17 } 18 19 func ExampleUrgencySMS() { 20 m := NewUrgencyMessage(ViaSMS()) 21 m.SendMessage("have a drink", "boo") 22 } 23 24 func ExampleUrgencyEmail() { 25 m := NewUrgencyMessage(ViaEmail()) 26 m.SendMessage("have a drink", "boo") 27 }