Golang设计模式之桥接模式

ShawnLee_123 · · 929 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

桥接模式

GitHub代码链接
Bridge Pattern用于把抽象是实现分离。使得二者可以独立变化。

什么是桥接模式

这种模式涉及到一个作为桥的接口,使得实体类的功能独立于接口实现类。

解决了什么问题

在多种可能会变化的情况下,用继承会造成类爆炸,扩展起来不灵活。我们把多角度的类分离出来,
让他们独立变化,减少它们之间的耦合。

优点

1.在多种可能变化的情况下,使用继承可能造成类特别多。桥接可以解决这个问题。
2.优秀的拓展能力

缺点

1.桥接模式会增加系统的理解和设计难度

代码实现

我们使用DrawAPI作为桥接模式的抽象接口,ShapeCirlce作为桥接模式的实体类。将抽象接口保存在实体类中,使得抽象接口实例变化时,ShapeCircle可以始终不变。

1.1 DrawAPI抽象接口定义

//DrawAPI 画图抽象接口,桥接模式的抽象接口
type DrawAPI interface {
    DrawCircle(radius, x, y int)
}

1.2 实现DrawAPI抽象接口类

//RedCircle 红色圆的类,桥接模式接口
type RedCircle struct{}

//NewRedCircle 实例化红色圆
func NewRedCircle() *RedCircle {
    return &RedCircle{}
}

//DrawCircle 红色圆实现DrawAPI方法
func (rc *RedCircle) DrawCircle(radius, x, y int) {
    fmt.Printf("Drawing Circle[ color: red, radius: %d, x: %d, y: %d ]\n", radius, x, y)
}

1.3 ShapeCircle实体类实现

//ShapeCircle 桥接模式的实体类
type ShapeCircle struct {
    Radius  int
    X       int
    Y       int
    drawAPI DrawAPI
}

//NewShapeCircle 实例化桥接模式实体类
func NewShapeCircle(radius, x, y int, drawAPI DrawAPI) *ShapeCircle {
    return &ShapeCircle{
        Radius:  radius,
        X:       x,
        Y:       y,
        drawAPI: drawAPI,
    }
}

//Draw 实体类的Draw方法
func (sc *ShapeCircle) Draw() {
    sc.drawAPI.DrawCircle(sc.Radius, sc.X, sc.Y)
}

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:ShawnLee_123

查看原文:Golang设计模式之桥接模式

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

929 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传