左耳听风
陈皓
网名“左耳朵耗子”,资深技术专家
175859 人已学习
新⼈⾸单¥98
登录后,你可以任选6讲全文学习
课程目录
已完结/共 119 讲
左耳听风
15
15
1.0x
00:00/00:00
登录|注册

110 | Go编程模式:委托和反转控制

你好,我是陈皓,网名左耳朵耗子。
控制反转(Inversion of Control,loC )是一种软件设计的方法,它的主要思想是把控制逻辑与业务逻辑分开,不要在业务逻辑里写控制逻辑,因为这样会让控制逻辑依赖于业务逻辑,而是反过来,让业务逻辑依赖控制逻辑。
我之前在《IoC/DIP 其实是一种管理思想》这篇文章中,举过一个开关和电灯的例子。其实,这里的开关就是控制逻辑,电器是业务逻辑。我们不要在电器中实现开关,而是要把开关抽象成一种协议,让电器都依赖它。这样的编程方式可以有效降低程序复杂度,并提升代码重用度。
面向对象的设计模式我就不提了,我们来看看 Go 语言使用 Embed 结构的一个示例。

嵌入和委托

结构体嵌入

在 Go 语言中,我们可以很轻松地把一个结构体嵌到另一个结构体中,如下所示:
type Widget struct {
X, Y int
}
type Label struct {
Widget // Embedding (delegation)
Text string // Aggregation
}
在这个示例中,我们把 Widget嵌入到了 Label 中,于是,我们可以这样使用:
label := Label{Widget{10, 10}, "State:"}
label.X = 11
label.Y = 12
如果在Label 结构体里出现了重名,就需要解决重名问题,例如,如果成员 X 重名,我们就要用 label.X表明是自己的X ,用 label.Wedget.X 表明是嵌入过来的。
有了这样的嵌入,我们就可以像 UI 组件一样,在结构的设计上进行层层分解了。比如,我可以新写出两个结构体 ButtonListBox
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《左耳听风》
新⼈⾸单¥98
立即购买
登录 后留言

全部留言(8)

  • 最新
  • 精选
  • limix
    控制逻辑的特征是可复用性比较高,多场景可用,而业务逻辑的特征是专用性,控制逻辑,应该复用控制逻辑,而不是复用也许逻辑
    归属地:安徽
    5
  • debugtalk
    手动点赞
    4
  • cvvz
    反转控制: 第一种改写方法——继承,好处是原有代码可以复用,控制逻辑和业务逻辑解耦,坏处是通用的控制逻辑无法复用 第二种改写方法——反转控制,好处是复用通用的控制逻辑,坏处是要修改原有代码的逻辑,把控制逻辑嵌入到了业务逻辑中
    归属地:日本
  • Geek_ce6971
    实现undo功能,有个地方是写反了吗 在 Override 的 Add()中,记录 Delete 操作;在 Override 的 Delete() 中,记录 Add 操作;
    1
  • 方勇(gopher)
    日常中有些装饰器其实可以用这种方式替换
  • 衡子
    厉害了👍
  • 一光年
    控制逻辑依赖业务逻辑,不如让业务容器依赖控制逻辑
  • Geek_46da16
    会玩,
收起评论
显示
设置
留言
8
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部