设计模式——桥接模式
2020-10-29 本文已影响0人
DevilRoshan
什么是桥接模式?
将抽象部分与它的实现部分分离,使它们都可以独立地变化。
实现
// 手机软件接口
type HandsetSoft interface {
Run()
}
// 手机品牌
type HandsetBrand struct {
Soft HandsetSoft
}
func NewHandsetBrand() *HandsetBrand {
return &HandsetBrand{}
}
func (this *HandsetBrand)SetHandsetSoft(soft HandsetSoft) {
this.Soft = soft
}
func (this *HandsetBrand) Run() {
this.Soft.Run()
}
// 手机游戏
type HandsetGame struct {
}
func NewHandsetGame() *HandsetGame {
return &HandsetGame{}
}
// 手机游戏实现手机软件接口
func (this *HandsetGame) Run() {
fmt.Println("运行手机游戏")
}
// 手机地址簿
type HandsetAddressList struct {
}
func NewHandsetAddressList() *HandsetAddressList {
return &HandsetAddressList{}
}
// 手机地址簿实现手机软件接口
func (this *HandsetAddressList) Run() {
fmt.Println("运行手机地址簿")
}
func TestNewHandsetBrand(t *testing.T) {
brandA := NewHandsetBrand()
fmt.Println("手机品牌A")
brandA.SetHandsetSoft(NewHandsetGame())
brandA.Run()
brandA.SetHandsetSoft(NewHandsetAddressList())
brandA.Run()
}
// === RUN TestNewHandsetBrand
// 手机品牌A
// 运行手机游戏
// 运行手机地址簿
// --- PASS: TestNewHandsetBrand (0.00s)
// PASS
优点:
- 抽象和实现分离。桥梁模式完全是为了解决继承的缺点而提出的设计模式;
- 优秀的扩展能力;
- 实现细节对客户透明。客户不用关心细节的实现,它已经由抽象层通过聚合关系完成了封装。
缺点:
- 会增加系统的理解与设计难度。由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。
适用场景
- 不希望或不适用使用继承的场景;
- 接口或抽象类不稳定的场景;
- 重用性要求较高的场景。
注意
- 不要一涉及继承就考虑该模式,尽可能把变化的因素封装到最细、最小的逻辑单元中,避免风险扩散;
- 当发现类的继承有n层时,可以考虑使用该模式。