zoukankan      html  css  js  c++  java
  • 读《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

  • 相关阅读:
    常用模块介绍
    正则表达式/re模块
    模块简介/模块的导入/模块的查找顺序/绝对导入和相对导入/软件开发目录规范
    迭代器/for循环本质/生成器/常用内置方法
    函数递归/二分法/列表,字典生成式/三元表达式/匿名函数/内置函数
    闭包函数/装饰器
    函数对象/函数的嵌套定义与调用/名称空间和作用域
    初识函数
    文件处理/光标移动/实时检测
    7-5字符编码和文件处理
  • 原文地址:https://www.cnblogs.com/MicroTeam/p/1959769.html
Copyright © 2011-2022 走看看