`
zhuyifeng
  • 浏览: 44700 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

设计模式所感

 
阅读更多

      刚接触高级语言编程的人是不会考虑怎么去设计类之间的关系的,只求能够以最简短最直白的方式实现系统需要的功能。同样的从c语言的面向过程的编程语言转行来做java、c#等的程序员也很难一时理解何为面向对象编程。面向对象与面向过程究竟有何区别?

 

      我们随便去网上搜搜,照本宣科的就能说出面向对象的三大显著特点:继承、封装和多态。答案很容易搜到,但是我们真的理解吗?自从出了一本《21天学通c++》后,像类似的《21天学通……》层出不穷。学一门语言,或者说是学习一门知识,需要长久以来日积月累的经历做基石,岂非21天能够真正领会?曾经看到一个帖子上说着多少c++程序员认为他们非常精通c++,殊不知他们都是拿着VC编译器去跑c程序。

 

      接触java编程半年多以来,我可以说还是一个菜鸟,也可以说在java的道路上跑了1/3(学习跟上目前的技术需要18个月,但是想要一直保持下去则需要终生不断关注该领域的发展),虽然肯定曾经在不知不觉中用到了继承、多态和封装,但是真正说到了解缘由,却还是处于一片混沌。在从编写“Hello World”开始,如果我们毕业之后不去大型公司面试,或者是不走程序员道路,可能一直到最后,我们都不会去编写一些大型程序,而是简简单单用eclipse新建一个java project,然后在这个工程下的一个包里就完成了全部的程序开发。这样固然简单,也可以很轻松的逃避设计类之间关系的困扰(即使遇到,也可以手动去修改代码,因为代码量并不是很多,当然在改完之后代码就变得面目全非了,高耦合),但是始终不是软件开发的真谛。在接触到通信这一部分后,由于开始设计更大的程序,我们开始遇到了架构类与设计之间的阻碍。这是一个重要的时期,如果我们跨过了这条河,面对软件开发的领域,我们的天空会变的广阔无边;如果我们卡死在这里,即使曾经编写出过多少功能强大的程序,也变得毫无价值,所谓一将功成万骨枯。人们常说程序的灵魂是算法,我曾经苟同这个观点,但是现在,我还要加上一点,那就是架构。为什么在一个公司里架构师的职位比程序员要高得多?为什么程序员一抓一大把,只能做基层工作,而架构师、需求分析师、设计师等却能当上主管?语言是死的,思想是活的,那种只会copy、paste的程序员其实并不能算为程序员,他们甚至可以被称作苦力了。苦力虽然工作是苦了点,但是他们起码还是可以通过高负荷的工作量来锻炼身体嘛~~,但是程序员每天盯着电脑屏幕看,时而工作至深夜,这种生活方式,造就了其高危职业的称号,而我们,也不乏看到程序员猝死的例子。有时会想想,我们以后呢,能否冲破这个牢笼前途光明,还是只能做一个苦逼的程序员?

 

      呵呵,本来想写一遍技术博客的,却在写的过程中不知不觉吐槽了。我想我事先拟定好的标题也该改了。关于设计模式,说实话,在看的过程中,我觉得这些东西都太Wonderful了,同时也佩服前人能够总结出这23种设计模式,我能够跟着他们的思想漫处漂游,为他们举的一个个诙谐而有趣的例子拍案叫绝。但是,真正合上书本之后,我能够自己想到的,却是寥寥可数,更别提应用了。在设计模式中,我记得最清楚的两句话是:

      一、抽象类是自底而上抽象出来的,而接口则是自顶向下设计出来的。抽象类是需要考虑到具体每个类之间的关系,是继承、同级还是毫无相关?我们需要在抽象类里尽量多的定义他们的共有方法,而把他们各自的特色写在自己的类里面;而接口则是表现不同类所具有的相同的方法,比如说老鸭 extends 鸭类 extends 动物米老鼠 extends 鼠类 extends 动物,他们是不同的类但都来源于动物类,但是他们都可以说人话,显然这不是动物所具有的特征,所以不能通过继承父类的方法得到。我们当然可以在他们各自的类里面定义这个方法,但是如果还有很多其他的类呢?比如说孙悟空、阿童木等啊。逐一定义实在太麻烦,这时就是接口的作用了,我们可以把他们共有的这个方法定义在接口里,然后都继承并实现这个接口。所以在软件开发的过程中,我们在动手开发之前还必须得想清楚需要什么,什么关系(也就是所谓的UML图),然后再根据这些想法来先定义接口,所谓软件开发是针对接口开发的,而不是针对实现开发的(依赖倒转原则),也即接口是自顶向下设计出来的。

      二、当一个类在整个软件开发中只被一个类继承的话,那么这就是一种过度设计了,可以将这两个类合并起来。事实上过度设计也是编写代码中的一种诟病。设计模式有四境界:1.没学之前是一点不懂,根本想不到用设计模式,设计的代码很糟糕;2.学了几个模式之后到处想用而时常造成误用模式不自知;3.学完之后感觉各个模式之间十分相似,无法区分其不同点,在运用是常常犹豫不决;4.修行到位了~~。其实从某种程度上讲不会用设计模式的人要远远超过过度使用设计模式的人。但是我们不能因噎废食啊,有时候做任何事情我们是需要抱着一种悲壮的心态,即使明知道以后会全部推倒重来,却仍然能够义无返顾的去做这一件事。除非我们是天才,否则这前三个阶段,我们是一定要经历的。而每个人,也都是这样成长起来的。

 

      关于设计模式,就算是再精彩的讲解,再生动的比喻,也只能给我们留下一时的印象,想要真正地掌握它,只有自己不断的前行,并在一次次的跌倒中总结经验,收获所得,这样才能把它变为自己的财富。最后回答一下上面的一次发问:做主管,或是做程序员,完全取决于当下

 

      一时兴起,小小吐槽,希望能给大家一点激励。

2
1
分享到:
评论
1 楼 陈雨璇 2012-03-11  
不错不错,抢沙发。

相关推荐

    人人都懂设计模式 人人都懂设计模式

    本书适合有一定编程基础的 IT 职场新人,对设计模式和编程思想感兴趣的人群。通过阅读本书,读者可以更好地理解设计模式,掌握软件开发中的设计思想和方法论,并提高自己的编程技能。 在软件开发中,设计模式是一种...

    软件设计模式(java版)习题答案.pdf

    软件设计模式(Java版)习题答案 本资源为软件设计模式(Java版)习题答案,由程细柱编著,人民邮电出版社出版。该资源涵盖了软件设计模式的基础知识,包括软件设计模式的概述、UML中的类图、面向对象的设计原则、...

    设计模式精解-GoF 23种设计模式解析附C++.pdf

    设计模式的学习过程往往充满挑战,但同时也充满了成就感。 #### 1. 创建型模式 - **Factory模式**:提供了一个创建对象的接口,但允许子类决定实例化哪一个类。Factory模式让一个类的实例化延迟到其子类。 - **...

    .NET设计模式精选.pdf

    本书旨在为对.NET设计模式感兴趣的学习者提供实用的学习资源。 书籍的标题和描述指出了其核心内容是关于***的设计模式,并强调了其对学习者的帮助作用。标签“***设计模式 设计模式精选”则清晰地表明了内容聚焦点...

    设计模式 GOF 23

    本书设计实例从面向对象的设计中精选出23个设计模式,总结了面向对象设计中最有价值的经验,并且用简洁可复用的形式表达出来。本书分类描述了一组设计良好,表达清楚的软件设计模式,这些模式在实用环境下有特别有用...

    研磨设计模式[书签]

    《研磨设计模式》是由陈臣和王斌合著,由清华大学出版社出版的一本深入探讨设计模式的专业书籍。设计模式是软件工程中的一个重要概念,它代表了在特定上下文中解决问题的常见方法,经过时间和实践的验证,具有很高的...

    二十三种设计模式【PDF版】

    主要是介绍各种格式流行的软件设计模式,对于程序员的进一步提升起推进作用,有时间可以随便翻翻~~ 23种设计模式汇集 如果你还不了解设计模式是什么的话? 那就先看设计模式引言 ! 学习 GoF 设计模式的重要性 ...

    设计模式(经典的软件工程书籍)

    书中还提供了模式目录的组织方式,帮助读者快速定位到感兴趣的设计模式。 #### 5. 如何选择和使用设计模式 书中不仅讲解了如何识别设计模式,还提供了选择和应用设计模式的方法论,包括评估模式的适用性、理解模式...

    界面设计模式 Designing Interfaces 2nd Edition

    《界面设计模式》(Designing Interfaces) 第二版是一本关于如何创建易于使用的用户界面的指南,作者Jenifer Tidwell通过详细的描述和案例分析,提供了一系列设计模式以帮助设计师构建更直观、更有效、更吸引人的界面...

    Java-设计模式.pdf

    在Java中,设计模式是软件工程领域中用于解决常见问题的一套被广泛认可的最佳实践。了解设计模式对于提高软件设计的质量和可维护性至关重要。文档"Java-设计模式.pdf"详细介绍了设计模式六大原则和工厂设计模式的...

    设计模式:可复用面向对象软件的基础--详细书签版

     “[设计模式]在实用环境下特别有用,因为它分类描述了一组设计良好,表达清楚的面向对象软件设计模式。整个设计模式领域还很新,本书的四位作者也许已占据了这个领域造诣最深的专家中的半数,因而他们定义模式的方法...

    设计模式可复用面向对象软件的基础.zip

    书名: 设计模式可复用面向对象软件的基础 英文原书名: Design Patterns:Elements of Reusable Object-Oriented software 作者: Erich Gamma 等 译者: 李英军 马晓星 蔡敏 刘建中 书号: 7-111-07575-7 页码: 254 定价...

    head first 设计模式,英文版

    《Head First设计模式》是一本深受开发者欢迎的设计模式教程,英文版为读者提供了全面而深入的理解,适合那些对设计模式充满兴趣并愿意投入精力去学习的朋友们。设计模式是软件工程中的重要概念,它们是解决常见问题...

    mvc设计模式 详解

    mvc设计模式详解 mvc设计模式是一种广泛流行的软件设计模式,早在70年代,IBM就推出了Sanfronscisico项目计划,其实就是mvc设计模式的研究。mvc模式在j2ee平台上非常流行,也是广大java开发者非常感兴趣的设计模型...

    Head.First.设计模式中文版pdf(第二部分/共七部分)

    《Head First 设计模式》是本深受程序员欢迎的图书,它由一群在编程教育领域有丰富经验的专家所著,其中包括了Eric Freeman、Elizabeth Freeman夫妇,Kathy Sierra以及Bert Bates。四位作者不仅将他们各自的编程背景...

    HeadFirst设计模式读书笔记

    HeadFirst设计模式 读书 笔记

    深入浅出设计模式封面 封底 序 前言 目录

    《深入浅出设计模式》是一本面向广大软件开发者和架构师的重要参考资料,它旨在帮助读者理解和掌握设计模式这一核心的软件工程概念。设计模式是经过长期实践和验证的、在特定场景下解决常见问题的有效解决方案,是...

    设计模式(.PDF)

    1.1 什么是设计模式 2 1.2 Smalltalk MVC中的设计模式 3 1.3 描述设计模式 4 1.4 设计模式的编目 5 1.5 组织编目 7 1.6 设计模式怎样解决设计问题 8 1.6.1 寻找合适的对象 8 1.6.2 决定对象的粒度 9 1.6.3 指定对象...

    Head First Design Patterns 英文版 Head First设计模式

    综上所述,《Head First Design Patterns》是学习设计模式的优秀资源。无论是新手还是有经验的开发者,都能够从书中获得宝贵的知识和启示,指导自己在软件开发实践中更加高效和优雅地解决问题。

Global site tag (gtag.js) - Google Analytics