`
zhuyifeng
  • 浏览: 44012 次
  • 性别: 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  
不错不错,抢沙发。

相关推荐

    传说中的经典设计模式书

    设计模式一书,经典中的经典,对设计模式感兴趣的朋友不要错过

    设计模式 GOF 23

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

    设计模式--C++

    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 指定对象...

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

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

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

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

    java设计模式并附带源码

    主要讲解java的设计模式,附有每个设计模式的demo样例,适合对设计模式感兴趣的人,简单易懂,易上手

    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 指定对象...

    GOLF设计模式(C++语言版)

    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 ...

    《国外写的,翻译版本》设计模式

    最出名的设计模式,语言诙谐明了。 目 录 序言 前言 读者指南 第1章 引言 1 1.1 什么是设计模式 2 1.2 Smalltalk MVC中的设计模式 3 1.3 描述设计模式 4 1.4 设计模式的编目 5 1.5 组织编目 7 1.6 设计模式怎样解决...

    《设计模式》中文版(23个设计模式的介绍与运用)

    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 指定对象...

    移动应用UI设计模式 读书笔记

    移动应用 UI 设计, 读书笔记, 记录摘取书籍中重点信息,有助于页面设计,原型设计等

    设计模式文档

    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 指定对象...

    Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides23种设计模式

    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 设计模式例子源代码 c++版 第二章 观察者模式

    最近在看head first 设计模式,书上的例子是用java编写的.因为工作上C用的比较多,所以决定编看书,边用C++也编写书上的例子.既可以加深对设计模式的理解,也顺便练习下c++. 希望这写代码也能帮助别人学习c++和设计模式...

    23种设计模式结构图

    23种设计模式结构图: 大家可以根据用意来分析,学习。 C++实现的代码我也会同步上传。 希望对设计模式感兴趣的朋友有所帮助。

    后端-设计模式-java-精讲

    1. **初学者**:对设计模式感兴趣的初学者可以通过本书系统地学习和理解常见的设计模式,掌握软件开发中常用的解决方案和设计思想。 2. **软件开发者**:对于正在从事软件开发工作的开发者来说,设计模式是提高代码...

    DAO设计模式辅助资料

    博客http://write.blog.csdn.net/postedit/47817289的辅助资料, 方便理解设计模式5——DAO,感兴趣朋友们,欢迎你下载。

    c++23种设计模式高清版.zip

    23种设计模式c++版,很适合提高自己的代码框架设计能力,感兴趣的可以拿去学习研究,望对你有所帮助,特别声明,不是视频二十pdf,不要弄错了

    软件设计体系结构+设计模式 全课件PPT,所有设计模式PPT和设计风格PPT及设计原则PPT

    在这里,您将找到一份丰富的软件设计资源,涵盖了软件设计体系结构、设计模式以及设计原则等关键内容。我们为您准备了全套的课件PPT,包括软件设计体系结构的详细讲解、各种设计模式的介绍以及设计风格和原则的探讨...

Global site tag (gtag.js) - Google Analytics