【IT168技术文档】 设计模式是面向对象编程的热门话题之一,越来越多的开发人员认识到设计模式的重要性。采用各种语言实现设计模式的文章也越来越多,但是很多开发人员发现很难将设计模式与实际开发中需要解决的具体问题相联系。因为使用设计模式的难点往往不在于模式的实现,而在于很难确定哪种模式可以在现实的应用场景中采用,从而导致了在现实的项目中,面对客户的压力,我们总是采用最直截了当的方法解决问题,来不及多考虑这些方法的优劣,即使明知将带来更大的麻烦也必须如此。有些时候因为选择了不恰当的设计模式,使原本简单的问题变得复杂化。
总是有些优秀的设计人员可以在同样短的时间内做出正确对待的判断,他们同样是依靠本能和直觉,只是这种本能是在日常编程开发中一点一滴积累起来的。如同一个剑客在危机时刻的一击,并不是一时的灵光乍现,而是平时刻苦修炼的结果。
俗话说,紧靠背棋谱成不了围棋高手。只在概念上理解设计模式而不实现,同样成不了架构设计师。在软件设计时,要有意识地问自己使用还是不使用设计模式,不要匆忙下结论。重视软件质量的改进,如果有可能,则在项目后期重构代码。同时注意学习同行的经验,很多开放源码项目是值得学习的。
(1)正确理解设计模式
模式所关注的不仅是重复的解决方案,更主要的是关注重复出现的应用场景和与场景相关的各种作用力。很多使用设计模式失败的原因,并不是实现设计模式的方法有问题,而是采用的设计模式不适合应用场景。这往往导致设计过度,使软件应得复杂,进而丧失对使用设计模式的信心。
(2)编程语言与设计模式的实现
尽管设计模式本身并不要求一定用某种语言来实现,但脱离了具体的实现,就无法真正理解设计模式。GOF的《设计模式》是经典之作,但毕竟距现在已经十几年了。这个期间开发平台已经进化了多代,很多新技术已经应用到编程中。有些技术可以简化设计模式的实现,有些技术已经采用了设计模式。因此,学习设计模式必须针对所使用的编程语言和开发平台。一定要注意,不是将《设计模式》中的例子转换为C#或者其他语言就等于知道如何实现设计模式了,而是要关注设计模式的精髓,并结合具体的语言特点完成其实现。就.NET而言,很多技术可以简化设计模式的实现,例如采用反射技术实现工厂和采用委托技术实现模板方法等。
(3)需求驱动
需求驱动不仅仅是功能性需求,还包括性能需求及运行时的需求,如软件的可维护性和可复用性等方面。
设计模式是针对软件设计的,而软件设计是针对需求的,一定不要为了使用模式而使用模式。在不合适的场合生搬硬套地使用模式反而会使设计应得复杂,使软件难以调试和维护。
(4)分析成功的模式应用项目
对现有的应用实例进行分析是学习模式的一个很好的途径,应当注意学习已有的项目不仅是学习设计模式如何实现,更重要的是注意在什么场合使用设计模式。
“置之死地而后生”可以说是一种解决方案,而不是模式,或者说仅仅给出了模式的实现,而没有交代使用的场合。项羽采用这个方案把秦军打败了,但马谡却丢了街亭。
(5)充分了解所使用的开发平台。
总的来说,设计模式是针对面向对象的软件设计的,因此在理论上适合任何面向对象的语言。但随着技术的发展和编程环境的改善,设计模式的实现方式会有很大的差别。在某些平台下,某些设计模式是自然实现的,某些模式已经被平台所实现,某些模式存在的上下文已经消失。
这里的平台不仅指编程语言,还包括平台引入的技术。.NET平台引进了反射、委托,以及属性等新技术,这些技术的使用使设计模式的实现方式有了很大的改变。例如,工厂方法通过采用反射技术,可以将其中的子类去掉。这实际上已经是一个.NET下的新模式,或者说是.NET的“方言”。
(6)在编程中领悟模式
软件开发是一项实践工作,最直接的方法就是编程。没有定式很熟却从来不下棋的围棋高手,也没有不会编程就成为架构设计师的先例。对设计模式的掌握是水到渠成的事情,你可能是“顿悟”,也可能是“渐悟”,但前提是必须有相当的实践积累。当然,并不是不需要看书学习,但实践仍然是必须首先要重视的。
认为编程如同写文章,提高需要有一个过程。在多多编程的同时,需要有一定的技巧。如果希望水平有较大提高,则需要对自己编写的代码不断重构。力求最优是个很好的习惯,当然前提是项目进度允许。即使项目时间紧张,也需要进行适当的总结。隔一段时间检查一下以前的工作,会发现自己是否已经有了提高。
(7)避免设计过度
设计模式解决的是设计不足的问题,但同时也要避免设计过度。一定要牢记简洁原则(Keep It Simple, Stupid, KISS),要知道,设计模式是为了使设计简单,而不是更复杂。如果引入设计模式使设计变得复杂,只能说我们把简单的问题复杂化了,问题本身不需要设计模式。
这里需要把握的是需求变化的程度,一定要区分需求的稳定篇和可变篇。一个软件必然有稳定的篇,这个篇就是核心业务逻辑。如果核心业务逻辑发生变化,软件就没有存在的必要,这个篇的逻辑是我们需要固化的。对于可变的篇,需要判断可能发生变化的程度来确定设计策略和设计风险。要知道,设计过度与设计不足同样对项目有害。
(8)合理看待设计模式的实现实例
现在,从各种途径可以发现各种设计模式的实现实例。需要说明的是,其中很多实例所说明的仅仅是设计模式的解决方案的实现,并没有分析模式使用的上下文。实际上,这也是最困难的篇——从而导致实例中的设计模式使用从实践的角度看,往往是过度设计,也就是有小题大做的嫌疑。
文章来自:http://tech.it168.com/n/d/2007-05-16/200705161205125.shtml
分享到:
相关推荐
在Asp.net中如何用SQLDMO来获取SQL Server中的对象信息 使用Relations建立表之间的关系并却使用PagedDataSource类对DataList进行分页 通过作业,定时同步两个数据库 SQLSERVER高级注入技巧 利用反射实现ASP.NET控件和...
当你要开发一个小型的系统,整个系统只有两三人开发,系统活不过5年,商业逻辑单纯,程序代码不超过万行,这时,你...所以,要练习,最好从小系统开始使用模型与架构,如此才能检讨与学习,日后方能在大系统中自如运用
有了这本书,C++开发者就有了一套最完整的、可以自如运用的工具包,从而能够方便、 高效地开发成功的、 多平台、并发式网络应用程序。 作者Douglas C.Schmidt博士,ACE的早期开发者。他是University of California...
灵活运用信息技术让初中政治教学轻松自如.docx
仿写自如租房网,有数据库
优化演示广播教学运用策略,让信息技术课堂收放自如.docx
自如房价图片训练集,已经转换成30x30的行列值。该文档没有标签
现在在做一个租房子的自如网,然后实现一个文字向上滚动。后期,还要将整个网站的数据库传上来
关于设计模式中涉及的原则与模式,项目使用java编码实现设计模式。 设计模式 原则 单一职责原则 单一职责原则(SRP),就一个类而言,应该仅有一个引起它变化的原因。 如果一个类承担的职责过多,就等于把这些职责耦合...
使用python对自如租房网站进行爬取信息,讲解非常详细,最全讲解。拥有最详细的讲解、最好的解释、最清晰的思路,这就是我们最纯粹的技术,也是我们的优势,相信这个程序可以为你打开爬虫道路上的一扇窗,也可以为你...
(3)运用学生成绩管理维护系统可以减轻学院教学人员的工作量,缩小开支,提高工作效率与准确率,能够节省时间,学生也能够尽快的知道自己的考试成绩,投入新的课程的学习或复习这次没有考过的课程。而学生成绩管理...
最新版收房合同--自如.pdf
1,软件的功能是对文件进行加密(一般用于加密1MB以下的文件如文档或图片) 2,软件完全免费,现在和将来...3,支持任何格式文件的加密解密 4,傻瓜式操作,加上即时提示功能(鼠标放在不懂的地方不要移动),新手也能操作自如
通达信指标公式源码 进出自如 黄进蓝出 源码 副图.doc
行业文档-设计装置-一种进退自如刀排.zip
电路引脚定义自如 ,实际印制板布线灵活 ,应用可靠。应用复杂可编程器件的“软硬件 ”特点和在系统可编程进行再编程设计来不断完善系统功能 ,缩短设计周期 ,同时保证设计系统的高可靠性。
截图工具 轻松自如的选择需要的图片 细到每一个按钮都可以轻松截取
让 Sketch 容易理解并上手简单,有经验的设计师花上几个小时便能将自己的设计技巧在Sketch中自如运用。对于绝大多数的数字产品设计,Sketch 都能替代 Adobe Photoshop,Illustrator 和 Fireworks。
各大厂java面试题(京东、自如、华软等等),主要是软件工程师,Java。可以参考。 各大厂java面试题(京东、自如、华软等等),主要是软件工程师,Java。可以参考。各大厂java面试题(京东、自如、华软等等),主要...
在网站的设计与开发过程中严格遵守软件工程的规范,运用软件设计模式,从而减少系统模块间的不协调性,力求做到系统的稳定性、可重用性和可扩充性。 本网站功能主要包括成员注册、成员管理、成员信息交流基本功能。...