设计模式--面向对象程序员的内功心法

1.写在前面

小寒接触程序3 年 有余。从懵懂无知,到现在略有感触。个中滋味,每一个走过的人想必都有类似的感受。因为高中时候对电脑所知甚少,更别提所谓的程序设计。就连基本的键盘指 法都够呛。但现实总有一番机遇,当刚开始接触程序设计这种“江湖之事”,难免诚惶诚恐。各种经历颇富传奇色彩,在此且按下不表。而后经过曲折的学习路线, 最终与面向对象这种程序思想结下了不解之缘。因心偶有所感,遂萌生将此间感触共享于江湖。若君以为言浅,还望莫笑。甚谢,甚谢!

2.初入江湖

因初涉江湖,无计傍身,小寒幸得前辈指点,遂与C 语言相识。当然少不了从HelloWorld 这种标准的程序员入门招式开始,当在那个黑黑的小窗口打印出那一句对世界的致敬后,也宣布了小寒的江湖处女秀的完成。小寒像一些其他经历过的人一样嘿嘿地笑了,心说:“不过如此而!”。但是,现在想来,想必那时写的那个程序估计都不够合格,至少代码风格不会过关。

而后,跌跌撞撞将C 语言那本经典的入门级武功秘籍-- 谭浩强老师出的《C 语言程序设计》啃完。至今那段经历仍记忆犹新。但因专业所限(小寒本身学习电子类专业,而后才通过其他途径走上计算机专业,属于半路出家型),遂接触程序机会寥寥,但因兴趣所向,乃坚持至今,在此与有类似经历者共勉之。经过此段学习,也算是对程序有了些初步印象。而后接触C++java 等的面向对象程序,但是对于其思想却不甚了解,更不用提在实际项目中使用这种设计思想。又对其深感神奇,遂后续风风火火的一场面向对象的征途就此开始了……

3.茅塞顿开

转眼距初入江湖已2 载,某日小寒正埋头于图书馆查找面向对象的相关书籍。在此两年中,对于面向对象也有了进一步的认识,但是却始终觉得略有欠缺,虽然对于面向对象的封装、继承、多态以及基本的设计规则也有了一些自己的想法。但总觉的似乎缺少了一些灵魂性的东西,直到看到那本《设计模式**** 》(在此略写,免有做广告之嫌)……

设计模式起势

程序之语言,如武之兵器。兵者,有刀枪剑戟斧钺钩叉……;程序者,如CC++JavaC#JavascriptVC++ ……御器之道在于心法身形,而至程序,其身形在于程序本身所有的特点,如C 之灵活多变、java 之简单易用……;心法者则在于其设计模式与思想。熟悉GoF 模式并灵活应用,便可掌握面向对象设计之精髓。但须谨记兵无常势、水无常形,诸位仍需时刻努力。切记,切记!

                                                         ---GoF(Gang of Four)

基本口诀

面 向对象,首先要理解对象并熟悉其组成的规则和约定,才可收放自如。对象简单理解即为对现实事物的本质进行归纳找出其对应的特点和所具有的行为,如从学生抽 象出具有学号、姓名等特点和具有选读课程等行为。而其进一步又可抽象出如人等高层次抽象。显然越是高层抽象表现越加模糊,正如从一群人中很难找出一个特定 的人一样。所以如何进行管理这些对象就成了学习设计模式的先决条件。现授9 句口诀,望从总领悟对象产生和共存之道。具体如下图1 所示。

1 基本口诀

1 中通用责任分配软件模式(General Responsibility Assignment Software Patterns,GRASP )着重考虑了设计类的原则及如何分配类的功能。GoF 模式则具体考虑设计的实现、类的交互及软件的质量,达到重用代码的目的。GoF 模式就是符合GRASP 模式要求的面向对象设计模式。

对象,在设计程序中的表现即为类。在类的孕育过程中,须知其如下两个责任:知道责任和行为责任。具体如图2 所示。

2 类的责任

熟练掌握上述两个责任和9 句口诀方为初境,可进行下面部分的学习。

  三招二十四式

岁月轮回,转眼数月过去,经过几个月的学习,在感觉已经熟练掌握了上面所说的两个责任和9 句口诀后。小寒终于开始了真正的设计模式之旅……

当翻开书册的第二卷,看到了如图3 所示的结构并有一些简短的附言。

3 GoF 模式之三招二十四式

3 中所列的为本门心法之三招二十四式,按如下规则进行划分:

     1.   创建者(Creational): 与对象创建有关。

     2.   结构型(Structural: 处理类或者对象的组合。

     3.   行为型(Behavioral: 描述类或对象如何交互及如何分配责任。

而后又有几番境界作为注解:

1.  无为之境

此境者,为众生。意思是没有学过设计模式的人,虽有所体悟,但难自成体系。往往率性而为,程序之道,毫无章法。

2.  忘我之境

此境者,乃初入此门之人。意为初学设计模式者,因感受思想之精巧而在设计中往往有滥用模式之嫌。思想随之进入忘我境界。但应谨记,人生之事,无非试错而。大胆尝试,终归会有正果。

3.  水月之境

此境者,心有所惑。犹如水中之月,朦胧而美丽。感觉诸式间冥冥若有联系。因有困惑,所以编程之时,便不再果断坚决,易考虑再三,担心误用设计模式而造成一些不必要的伤害。无需担心,当静心体悟。离大成之道不远矣。

4.  空灵之境

此境者,觉醒于面向对象程序设计之道。心境空灵轻盈。不再拘泥于章法,率性而为亦暗含真意。往往能将模式拆解或者演化出更适合需求的形式,并能够根据需要将多个模式良好整合在一起。即达到无招胜有招之化境。

读 罢,小寒感觉设计模式之道玄之又玄。但是当真正深入其中,才发现,原来先辈的经验确实有很多可取之处。他将在程序设计中出现的各种情况进行系统的归纳和提 炼,才整合出这三招二十四式(这里提到整合,实为设计模式大都从实际出现的各种情况中提炼而来)。而后又发现,在实际的项目当中,小寒已经将单例模式作为 系统全局信息的储存方式,将工厂方法应用到了设计对数据库的通用接口当中……只不过,那时完全不知道世上还有如此面向对象程序员的内功心法之言。或许,程 序之道,本就相通,殊途而同归。但是此心法无疑是通往成功的一条捷径。遂有茅塞顿开之感。自此欲罢不能。

据说,现在小寒正处于忘我之境中。似乎就要冲入水月之境了。至今仍在寻觅突破之途。还请诸君默默地为他祝福吧……

4.写在最后

限 于篇幅,本文没有详细论述设计模式的各个细节部分,甚至一些基本的概念也没有详细的进行论述。仅仅是通过小寒的视角将设计模式重新向大家进行讲述,希望将 自己的思想同各位“江湖之人”进行分享。事实上,模式走到现在,也历经了很多风雨,但是思想总归有其局限性,所以在编程的道路上,不应过分拘泥形式,为模 式而模式可能会适得其反,这还需要大家共同努力,在编程的过程中进行摸索和总结。另外,本文所述的一些模式为原始的GoF 模式,而如今模式的发展已经远远不限于这二十多种,有兴趣的读者可以通过各种途径查阅相关的资料进行进一步的了解。

参考文献:

1.  莫勇腾. 深入浅出设计模式(C#/Java 版):清华大学出版社,2006

2.  程杰. 大话设计模式:清华大学出版社,2007

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值