zoukankan      html  css  js  c++  java
  • 设计模式_第一篇_开场

    以后我将时不时地写些关于设计模式的文章,和大家分享。如果有的地方表述不对,希望大家指正,毕竟我也是刚刚开始。
    在我写这篇文章时,我猛然发现,从面向过程,到面向对象,再到设计模式,我经历了将近10年的时间,而且以后的路必定还要更长。希望我学习设计模式的个人经历,能给你,对编程有兴趣的你,一些和帮助和学习的方向。因为,也许对于写软件的人来说,能够搞软件设计或是当黑客,是程序员的追求……毕竟面向过程的编程思想早已经成为历史,而面向对象的思想都出现十多年了,是现在的主流,未来的发展则是面向服务(SOA)的编程思想,时不我待,技术越是进步,理解掌握的过程就越长。另外,我上边写的是“某某的编程思想”,因为,面向对象是无法脱离面向过程的,只是对事物的抽象,面向对象的思想比面向过程更加抽象,站在更高的角度。对于面向过程和面向对象思想的比较,你可以看看《大象——Thinking in UML》这本书。这里我稍微提一下面向过程和面向对象的编程思想。面向过程方法认为我们的世界是一个个相互关联的小系统组成的。只要将这个小系统中的每一步骤和影响这个小系统走向的所有因素都分析出来,我们就能完全定义这个系统的行为。但是将这个世界视为过程的这个方法本身蕴藏一个前提假设,即这个过程是稳定的。这样我们才有分析的基础,所有的工作成果都依赖于对这个过程的步步分析。同时,这种步步分析的过程分析方法还导致另一个结果,即过程中的每一步都是预设好的,有着严谨的因果关系。只可惜我们这个世界从来都不是一成不变的,尤其到了信息化时代,一切都无时不刻不在发生着变化。系统所依赖的因果关系变得越来越脆弱。问题的本质出在认识方法上。而面向对象方法将世界看作一个个相互独立的对象,相互之间并无因果关系,只有在某个外部力量的驱动下,对象之间才会依据某种规律相互传递信息。因此,面向对象方法与面向过程方法根本的不同,就是不再把世界看作一个紧密联系的系统,而是看成一些相互独立的小零件,这些零件依据某种规则组织起来,完成一个特定的功能。
    其实,开发软件最花费时间的,一是软件的后期维护,二是当客户的需求变化时,现有代码无法达到客户的要求,此时,如果小改还好,大改怎么办,难道要重新来过吗?设计模式之所以重要,就是因为它可以使软件在不断变化的客户需求中游刃有余,使软件更加容易维护,从而减少开发成本。我想任何一个老总听到“减少开发成本”,一定会高兴的。因此,你可以不会软件设计,不懂设计模式,但你不能不知道它。如果你不知道他,那么你顶多也就是一个复制粘贴的机器而已,不是一个真正的程序员,软件工程师。
    说说我个人学习设计模式的经历。读本科时,接触的一直都是面向过程,比如C和Pascal。直到我读研的时候,才对面向对象有了一个比较全面的学习和初步的认识,而在此之前,一直都处于面向过程的编程思想。当我接触面向对象后,虽然当时不怎么会使用,顶多也就是定义几个类,但在自己的感觉中,面向对象的思想无疑是编程的方向所在。那之后,在网上买了相关的书籍,其中就有《Head First设计模式》,由于当时没什么编程经验,大概浏览了一下后,先不说这本书是用Java描述的,就是其中的内容我也是根本不理解……
    事隔4年,我已经毕业了,工作也将近一年了。当我再次翻开这本书时,曾经令我“匪夷所思”的这本书,现在不同了。这都应该归功于我的那位同事。在他的帮助下,我对面向对象有了飞跃的认识。对于我说的这个同事,有必要提一下,毕竟对于一个人来说,我相信都有那么一个对自己影响很大的人。他刚到公司的时候,头正好安排他做在我的旁边。经过几次聊天,我发现,他在编程方面的确是相当厉害,尤其是在软件设计方面。从那以后,我就向他请教,他也毫不保留地给我讲解。就这样,我从他那里,了解了很多编程思想方面的东西,比如,对项目如何划分业务层,UI层,数据库层,持久层等等,以及对一些具体应用应该采用哪种方法。他所说的东西,着实让我想了很久很久……这期间,我自己也看了大量的资料,比如微软的PET SHOP,《设计模式》……再就是,一遍一遍重写改写我的程序。让我印象最深的是,有一次,我遇到一个问题,让他帮我看看,当我点开一个按钮,还没谈到正题,他就“无奈地”说:“这写的不对啊……”,其实经过这段时间跟他的交流,我的确感觉到,我写的是不对,但至于怎么不对,我真是说不清。他接着说:“这‘两行代码’就完了,你怎么写这么多……”,正是他这句无心的话,让我又重新反思了他以前教我的东西。现在,我也敢和他敢说同样的话:“顶多两行代码就搞定了……”,以后我专门谈到这个问题。
    《Head First设计模式》这本书的确让我受益匪浅,但是对于没有多少编程经验,身边又没有“高手”指导的人来说,这本书的内容的确是太难了点。即便是我的这位同事,工作7、8年了,也就使用了书中1/3的模式,因为,每个模式都有它使用领域和情况,以及客户的需求。

  • 相关阅读:
    转载:Python十分钟入门
    Think Python: How to Think Like a Computer Scientist
    LeetCode(34):搜索范围
    LeetCode(33):搜索旋转排序数组
    LeetCode(32):最长有效括号
    LeetCode(31): 下一个排列
    LeetCode(30):与所有单词相关联的字串
    LeetCode(29): 两数相除
    LeetCode(28): 实现strStr()
    LeetCode(27): 移除元素
  • 原文地址:https://www.cnblogs.com/liuning8023/p/2153728.html
Copyright © 2011-2022 走看看