随笔 - 82  文章 - 0  评论 - 398  阅读 - 17万

读《design pattern》有感

                 我不知道大家为什么对于“码农”这个称呼那么在意,认为他不光彩,是因为“码农”是一个劳动强度大,获利少的职业?还是因为他和农民有那么一丁点的关系?任何职业都有其存在的艺术性!或者说美感!!农民又怎么了?农民就不懂艺术吗?农民一样高贵!我们仅仅需要的是一双能发现美的眼睛和一双能创造美的双手!

                                   

                                                                            (龙胜龙脊梯田)

                                  

                                                      (还记得吗?12年前,这里正是指环王电影的场景)

            最近看了《design pattern》这本书,还没有看完,到我已经被他深深的吸引了。这本书是一本与码农息息相关的书。我们明白,设计一个面向对象的软件不容易,而设计一个可重用的软件更不容易。这本书作者的目的是将一些设计软件上的经验总结成一些pattern,当碰到类似的问题时可以使用这些前人总结好的pattern来进行设计,可以达到重用的效果。

            那么,什么是design pattern?一个建筑师曾说过:“Each pattern describes a problem which occurs over and over again in our environment , and then describes the core of the solution to that problem , in such a way that you can use this solution a million times over, without ever doing it the same way twice”虽然他说的是建筑,但又何尝不是软件?这本书就是讲pattern中类与对象的组合,交流关系,并且如何通过这些pattern解决常见问题。当然了,我们的重点并不是如何解决问题,我们的目的是想通过设计良好的格式,达到可重用,并且高效的效果。

           说到重用,这确实是我们需要时刻注意的东西!看过《变形金刚》的童鞋应该可以深切体会重用的重要性吧!书中在介绍各种pattern之前给我们介绍了四种重用的技巧。分别是继承,组合,代表,带参数的类。继承,和组合相信大家都比较熟悉,如果熟悉c#的童鞋对代表(delegate)应该也不会陌生,带参数的类,指的是如List<>之类等类似 c++ 中template。

           这四种技巧各有优缺点点,继承虽然简单,却有破坏封装性的嫌疑。当父类需要改变时必须得考虑是否会对其子类有影响,并且其是在编译时确定的,不能再运行时改变。组合是一个比较好的形式,但会造成对象过多,影响效率。代表极大的增强了程序伸缩性,但是不可避免的,他有点破坏了程序的可读性。

                书中给出了两个准则(为了不破坏原意,所以使用英文):

                         1. Program to an interface , not an implementation

                         2. Favor object composition over class inheritances

               这些都很基础,但是很重要!书的后半部分介绍了各种pattern,见下图:

              我就不一一介绍了,相信大家对于Factory,Iterator应该不陌生吧,如果弄过编译器的童鞋,看到Visitor应该也很有感觉吧~,如果玩过java.awt.event库,对于Adapter应该也见怪不怪了吧。呵呵,这些东西我认为就是一种美的存在,虽然现在的程序向面向对象的思维开始转化,强调对象之间的关系与交流,这是一种思维上的进化,但是结构化也有其好的一面,他的工整,清晰是我们需要学习的!

 

MicroTeam Liuhang

posted on   MicroTeam  阅读(404)  评论(4编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述

点击右上角即可分享
微信分享提示