110 | Go编程模式:委托和反转控制
陈皓
该思维导图由 AI 生成,仅供参考
你好,我是陈皓,网名左耳朵耗子。
控制反转(Inversion of Control,loC )是一种软件设计的方法,它的主要思想是把控制逻辑与业务逻辑分开,不要在业务逻辑里写控制逻辑,因为这样会让控制逻辑依赖于业务逻辑,而是反过来,让业务逻辑依赖控制逻辑。
我之前在《IoC/DIP 其实是一种管理思想》这篇文章中,举过一个开关和电灯的例子。其实,这里的开关就是控制逻辑,电器是业务逻辑。我们不要在电器中实现开关,而是要把开关抽象成一种协议,让电器都依赖它。这样的编程方式可以有效降低程序复杂度,并提升代码重用度。
面向对象的设计模式我就不提了,我们来看看 Go 语言使用 Embed 结构的一个示例。
嵌入和委托
结构体嵌入
在 Go 语言中,我们可以很轻松地把一个结构体嵌到另一个结构体中,如下所示:
在这个示例中,我们把 Widget嵌入到了 Label 中,于是,我们可以这样使用:
如果在Label 结构体里出现了重名,就需要解决重名问题,例如,如果成员 X 重名,我们就要用 label.X表明是自己的X ,用 label.Wedget.X 表明是嵌入过来的。
有了这样的嵌入,我们就可以像 UI 组件一样,在结构的设计上进行层层分解了。比如,我可以新写出两个结构体 Button 和 ListBox:
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
Go编程模式:委托和反转控制 陈皓在本文中介绍了控制反转(Inversion of Control)的软件设计方法,强调了将控制逻辑与业务逻辑分离的重要性。文章首先介绍了在Go语言中使用Embed结构进行委托的示例,通过结构体嵌入和方法重写实现了多态。接着,陈皓提出了反转控制的概念,通过一个UndoableIntSet的示例展示了如何在已有代码的基础上扩展新功能。最后,他介绍了另一种方法,即反转依赖,通过定义一个函数接口实现了控制逻辑Undo对业务逻辑IntSet的依赖,从而实现了代码的复用。 本文通过具体的示例和代码演示,生动地阐述了委托和反转控制的编程模式,强调了分离控制逻辑和业务逻辑的重要性,以及如何通过不同的方式实现代码的扩展和复用。读者可以从中了解到Go语言中的编程模式和技术特点,对软件设计和开发有很好的启发和指导作用。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《左耳听风》,新⼈⾸单¥98
《左耳听风》,新⼈⾸单¥98
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(8)
- 最新
- 精选
- limix控制逻辑的特征是可复用性比较高,多场景可用,而业务逻辑的特征是专用性,控制逻辑,应该复用控制逻辑,而不是复用也许逻辑2022-09-07归属地:安徽5
- debugtalk手动点赞2021-06-124
- cvvz反转控制: 第一种改写方法——继承,好处是原有代码可以复用,控制逻辑和业务逻辑解耦,坏处是通用的控制逻辑无法复用 第二种改写方法——反转控制,好处是复用通用的控制逻辑,坏处是要修改原有代码的逻辑,把控制逻辑嵌入到了业务逻辑中2022-08-27归属地:日本
- Geek_ce6971实现undo功能,有个地方是写反了吗 在 Override 的 Add()中,记录 Delete 操作;在 Override 的 Delete() 中,记录 Add 操作;2022-01-191
- 方勇(gopher)日常中有些装饰器其实可以用这种方式替换2021-12-20
- 衡子厉害了👍2021-11-30
- 一光年控制逻辑依赖业务逻辑,不如让业务容器依赖控制逻辑2021-08-11
- Geek_46da16会玩,2021-07-26
收起评论