桥接模式通过接口与组合分离抽象与实现,如遥控器控制不同设备。定义Device接口,TV和Radio实现其方法;RemoteControl持有Device接口,实现基础操作;AdvancedRemote嵌入RemoteControl并扩展静音功能。使用时,tv := &TV{}; remote := NewRemoteControl(tv); remote.Power()输出”TV is ON”;radio := &Radio{}; advanced := NewAdvancedRemote(radio); advanced.Mute()输出”Radio tuned to 0″和”Device muted”。新增设备或遥控器无需修改原有代码,符合开闭原则,Go的接口隐式实现与结构体组合使解耦更自然。

桥接模式用于将抽象部分与实现部分分离,使它们可以独立变化。在 Go 语言中,由于没有继承机制,通过接口和组合的方式天然适合实现桥接模式。这种结构特别适用于多维度变化的场景,比如不同类型的对象需要搭配不同的行为实现。
定义实现接口
桥接的核心是把可变的部分提取为接口。假设我们有一组设备(如电视、收音机)和一组遥控器(基础遥控、高级遥控),设备控制方式可能不同,我们希望遥控器逻辑与设备解耦。
先定义设备控制的接口:
type Device interface { TurnOn() TurnOff() SetChannel(channel int) GetChannel() int}
这个接口代表“实现”层级,具体由各类设备实现。
立即学习“go语言免费学习笔记(深入)”;
实现具体设备
以 TV 和 Radio 为例:
type TV struct { channel int}func (t *TV) TurnOn() {fmt.Println("TV is ON")}
func (t *TV) TurnOff() {fmt.Println("TV is OFF")}
func (t *TV) SetChannel(channel int) {t.channel = channelfmt.Printf("TV channel set to %dn", channel)}
func (t *TV) GetChannel() int {return t.channel}
type Radio struct {channel int}
func (r *Radio) TurnOn() {fmt.Println("Radio is ON")}
func (r *Radio) TurnOff() {fmt.Println("Radio is OFF")}
func (r *Radio) SetChannel(channel int) {r.channel = channelfmt.Printf("Radio tuned to %dn", channel)}
func (r *Radio) GetChannel() int {return r.channel}
抽象遥控器结构
遥控器作为“抽象”部分,持有对 Device 的引用,不关心具体类型:
type RemoteControl struct { device Device}func NewRemoteControl(device Device) *RemoteControl {return &RemoteControl{device: device}}
func (r *RemoteControl) Power() {r.device.TurnOn()}
func (r *RemoteControl) Off() {r.device.TurnOff()}
func (r *RemoteControl) ChannelUp() {channel := r.device.GetChannel()r.device.SetChannel(channel + 1)}
func (r *RemoteControl) ChannelDown() {channel := r.device.GetChannel()r.device.SetChannel(channel - 1)}
这样,RemoteControl 不依赖任何具体设备,只依赖 Device 接口。
扩展抽象功能
如果需要更高级的遥控器,比如带静音按钮或屏幕显示,可以扩展抽象层:
type AdvancedRemote struct { *RemoteControl}func NewAdvancedRemote(device Device) *AdvancedRemote {return &AdvancedRemote{RemoteControl: NewRemoteControl(device)}}
func (a *AdvancedRemote) Mute() {a.device.SetChannel(0)fmt.Println("Device muted")}
AdvancedRemote 复用了基础遥控功能,并添加新行为,而无需修改设备实现。
使用示例:
tv := &TV{}remote := NewRemoteControl(tv)remote.Power() // TV is ONremote.ChannelUp() // TV channel set to 1radio := &Radio{}advanced := NewAdvancedRemote(radio)advanced.Power() // Radio is ONadvanced.Mute() // Radio tuned to 0, Device muted
通过桥接模式,设备类型和遥控器类型可以独立扩展。新增设备只需实现 Device 接口,新增遥控器只需组合已有逻辑并扩展。Go 的接口隐式实现和结构体组合让这种解耦自然且简洁。
基本上就这些。只要抓住“抽象与实现分离”的核心,用接口定义能力,用组合建立联系,就能有效解耦复杂结构。
以上就是Golang如何使用桥接模式解耦结构的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1420727.html
微信扫一扫
支付宝扫一扫