《实现模式》读书思考(1)
1. 类是昂贵的设计元素,因此减少类的数量便是对系统的改进。
2. override其实是一种设计上的屈服,abstract除外。换句话说,virtual实际上就是一种屈服。
3. 尽量用一个单词为基类命名,这样比较简单。比较容易为子类命名。
4. 表达“这是我要完成的任务,除此之外的细节不归我操心”,这个是interface的使用范畴。如果无权改变实现,大量使用interface会严重拖累日后的设计调整。
5. 如果程序只是小范围使用,让设计元素的可见性略高还不是什么问题。但如果把接口发布给很多人使用,那么最好是准确地指定希望让他们看到哪些操作。
6. 抽象类和接口的选择还有一点就是要取决于抽象的变化。
7. 用新接口继承原有接口来发布接口新的版本。
8. 如果你面对一个可能只是暂时静止的情景,随后的操作或者查询都针对这个情景来进行,那么函数式的风格比较合适。
9. 通过只提供get方法来构造一个不可变对象。也成值对象。
10. 多态的优美之处实际上是在于它给系统开启了变化的机会。
11. 如果对象的逻辑完全由类来决定,阅读者只要看类的方法名就会知道发生什么。一旦各个实例有不同的行为,就需要在运行时观察或分析数据流才能理解一个对象的行为。
12. 要实现实例特有的行为,if-else是最简单的方式。这样的好处在于所有的逻辑都在同一个类里。缺点是除了修改对象本身的代码之外,没有其他的办法能够修改它的逻辑。
13. 程序中的执行路径越多,整个程序正确无误的可能性就越低。也就是说,条件语句的增加会降低可靠性。
14. 用条件语句来分发,但是要保证条件语句只有最简单的逻辑,而把主要代码放到子类中。
15. 另一种实现特定实例的办法是把部分工作委派给不同类型的对象。不变的逻辑放在发起委派的类中,变化的逻辑交给被委派的对象。
16. 尽管库类相当常见,但它不适合大量使用,把所有逻辑都放在静态方法中就错过了对象的最大好处。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义