由学习设计模式想到的(精华2)

本文探讨了软件设计中的核心理念——高内聚低耦合,并详细解释了如何通过设计模式实现这一目标。文中强调了理解变化的重要性及如何正确地应用设计模式来解决问题。

写代码无非追求两个目标,第一是满足需求,第二是面对需求变化时好维护。

好维护的首要前提是我们能够理解代码,其次是代码好修改。

代码好修改的核心是良好的代码组织,良好的代码组织意味着高内聚低耦合,没有重复。

设计模式主要就是用来达到上述目标的。

学习设计模式时,估计有的人仅仅是记住了每个模式的形,而没有考虑每个模式是用来解决什么问题的,且更加会忽略只有代码需要变化时才会带来这些问题这个事实。

正确的学习思路,应该是首先思考这个模式是用来解决遇到什么变化时,如何通过达到高内聚低耦合满足需求,然后思考如果不采用模式会出现啥问题。

而在写代码时,首先得考虑可能会发生哪些变化,概率有多大,如果已经明确一个变化不会出现,何必花费心思去搞什么模式,采用简单直接的方法解决为啥不可。

高内聚低耦合,没有重复不仅仅是针对类,对文件,包,程序一样都行得通。

对于高内聚(大家都内聚了自然互相之间低耦合)的理解尤为重要,高内聚有时也叫做单一职责原则(一个关注点,只要觉得是一个关注点就应该独立起来)。

目前为止,我了解到的一些设计原则之类的,都满足上面的理解。

对可见性的封装,可以保持低耦合。

变化自然是关注点,不是关注点自然不会变化。对一个变化点的进行封装,也就是对一个关注点的进行封装,自然就是高内聚的。

继承对应的是没有重复。

多态也是间接为了高内聚,比如经常举得Shape的例子,drawAll关注的是画图形,而不关注具体是什么图形,为了把不关注点搞出去(不搞出去就不是高内聚),就得利用多态特性。

抽象是为了低耦合。

依赖倒置原则把变化的部分抛出去,且让变化依赖于它提供的抽象,自然是为了它与变化的低耦合。

工厂模式是把对象的创建过程抛出去,作为单独的一个关注点

不同层次的关注点大小不一样,比如PL关注的是项目,组员关注的是项目中的一个模块,如果PL直接关注了多个模块,那么他就不是内聚的,如果PL是通过指示组员间接去关注若干模块,他不会直接写代码,他就是内聚的。

如果你能只保持一个关注点,那么你做起来就不会太复杂,至少没有其他因素的干扰。

如果你能只保持一个关注点,那么你稳定的可能更大。

发现你关注点中的子关注点,通过抽象分离出去,保持自己真正的关注点。



03-18
### 关于Go语言的相关资料 Go语言是一门现代化的编程语言,起源于2007年并正式发布于2009年[^1]。其设计目标在于结合动态语言(如Python)的高效开发体验以及编译型语言(如C/C++)的高性能与安全性。以下是关于Go语言的一些重要参考资料: #### 官方文档与教程 官方文档是学习任何一门语言的最佳起点之一。Go语言官方网站提供了详尽的语言规范、标准库文档以及入门指南。这些资源可以帮助开发者全面理解Go的核心概念及其生态系统。 #### 高级并发模式 对于希望深入研究Go语言并发特性的开发者来说,“Go Concurrency Patterns” 和 “Advanced Go Concurrency Patterns”的幻灯片及演讲视频是非常宝贵的资源[^2]。它们不仅介绍了基本的goroutine和channel用法,还探讨了许多高级的应用场景和技术细节。 #### 社区贡献的学习材料 GitHub上的Wiki页面收集了大量的优质学习链接,其中包括但不限于精华文章列表、相关博客集合以及公开讲座等内容。此外还有一个名为Awesome Go的大规模整理项目,几乎涵盖了所有你能想到的主题领域——从基础语法到实际工程项目实践都有涉及。 #### 开发工具支持 当提到具体的编码环境配置时,Eclipse作为一款多功能IDE同样能够很好地服务于Go程序员群体.[^3].通过安装特定插件,用户可以在该平台上享受到诸如智能提示、即时错误检测等功能带来的便利. #### 技术特性解析 值得一提的是,在内存管理方面,Go具备独特的处理方式。例如它可以安全地返回局部变量地址而无需担心生命周期问题,这是因为内部实现了智能化的对象分配策略:一旦检测到某个对象仍处于活跃状态,则会被迁移至堆区域保存直至不再被引用为止[^4]. ```go func createClosure() func(int) int { var localVar int = 42 return func(x int) int { localVar += x return localVar } } deferred := createClosure() fmt.Println(deferred(1)) // 输出结果为43 ``` 上述代码片段展示了如何利用闭包机制来操作函数内的局部变量,并且即使调用结束后也不会立即销毁数据结构实例。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值