桥接模式
桥接模式(Bridge Pattern): 将抽象部分和现实分离, 使他们可以独立变化. 它是一种对象结构模式,
又称为柄体(Handle and Body)模式或接口(Interface)模式。
主要解决:主要解决在软件系统中,有时候面临着”一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;
由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。
优点 和 缺点
优点:
- 分离抽象接口及其实现部分。
- 桥接模式提高了系统的可扩充性,在两个变化维度中任意扩展一个维度,都不需要修改原有系统。
缺点:
- 桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| type AbstractMessage interface { SendMessage(text, to string) }
type MessageImplementer interface { Send(text, to string) }
type MessageSMS struct { }
func ViaSMS() MessageImplementer { return &MessageSMS{} } func (m *MessageSMS) Send(text, to string) { fmt.Printf("send %s to %s via Email", text, to) }
type MessageEmail struct { }
func ViaEmail() MessageImplementer { return &MessageEmail{} }
func (*MessageEmail) Send(text, to string) { fmt.Printf("send %s to %s via Email", text, to) }
type CommonMessage struct { method MessageImplementer }
func NewCommonMessage(method MessageImplementer) *CommonMessage { return &CommonMessage{ method: method, } }
func (m *CommonMessage) SendMessage(text, to string) { m.method.Send(text, to) }
type UrgencyMessage struct { method MessageImplementer }
func NewUrgencyMessage(method MessageImplementer) *UrgencyMessage { return &UrgencyMessage{ method: method, } }
func (m *UrgencyMessage) SendMessage(text, to string) { m.method.Send(fmt.Sprintf("[Urgency] %s", text), to) }
|