很多人在学习设计模式,也都能把GOF书中的factory, state, singleton, decorator等等说的叽里呱啦的,但是很多人其实都不知道怎么来用设计模式,工作几年,看过一些优秀的设计,但看过的更多的是滥用模式的设计,大部分人对设计模式的了解也都停留在层面上,在工作中曾有机会去对资历年长过自己的同行进行过面试,GOF中的模式随便挑一些出来问询,模式的用途,解决的问题以及优缺点什么的,大部分都能答个八九不离十,但是再往深入点,比如问,state与strategry的区别?或者两个维度的业务变化可以用Bridge来分离,那面对大于两个维度的业务变化时呢? 对于此类稍微深入点的问题,面试者往往不知如何作答。
或许是交际圈太窄,在现实生活中还没有接触到传说中的大牛,能够给予点播,以致往往在遇到问题时,只能闷着头颅去网络中四处寻找,然而网络中大多数人的理解显然都还是停留在理论层面,甚少有实际运用的例子,以致在某些时候,使用了模式后和使用之前没多大区别,有点画蛇添足的味道。
举个工厂模式的例子,大多数文章都只是描述了工厂模式是什么,为什么要用,以及优缺点什么的,却唯独少了描述如何使用。比如说,工厂模式是为了封装对象的创建,降低具体产品和Client的耦合等等,大体上就是说,原先使用new Shape的地方, 换成factory创建的方式。
//使用工厂模式前,client调用的方式
Shape shape=new Circle();
//使用工厂模式后,client调用的方式
ShapeFactory factory=new CircleFactory();
Shape shape=factory.createShape();
从上面的代码中,你看出了什么不对劲的地方了吗? 如果我们真的这么来使用工厂模式,那么使不使用工厂模式没有什么两样,为什么? 使用工厂模式前,client的代码依赖于具体的产品对象-Circle,使用工厂模式后,client的代码是不依赖于具体的产品对象-Circle了,但是转而依赖具体的工厂对象-CircleFactory了,依赖关系只是转移了,并没有降低。 但是这正是网上以及一些书籍中讲解工厂模式时所使用的方式,而且鲜有说明其中的缘由。这就造成了很多初学者乃至一些工作了多年的程序员都在这样使用着设计模式。
再举个策略模式的例子,这是一个很简单的模式,但是仍然有很多人不知道策略模式还有一个Context元素,也不知道这个Context元素的作用, 既然模式里包含了这个Context,自然有它的用意。所以,对于我来讲,未能充分了解其意图之前,设计模式,还是不用为好。
分享到:
相关推荐
.NET关于string转换的一个小Bug Regular Expressions 完整的在.net后台执行javascript脚本集合 ASP.NET 中的正则表达式 常用的匹配正则表达式和实例 经典正则表达式 delegate vs. event 我是谁?[C#] 表达式计算引擎...
高考作文要避免六大硬伤.doc
经销商的五大错位硬伤.doc
面试亟待避免十二种“硬伤”.docx
初中语文语文论文课堂浪费我们教学的硬伤
经销商的五大“错位”硬伤.doc
外企面试,回避硬伤。。。。。。。。。。。。。。。
《商品房预售合同示范文本》的亮点与硬伤.pptx
本文从UML建模连贯性方面存在的问题,以管理软件开发为例,针对与UML模型衔接的上游、下游、模型内部关系三个方面,分析了采用UML建模造成的三大隔阂,希望与众多建模爱好者共同探讨。 在国内的公开报道中,几乎...
而未来10年,被誉为次时代显示技术OLED(Organic Light EmitTIng Diode,有机发光二极管)有一定的机率取缔液晶技术,成就一番霸业CRT体积庞大而被淘汰,那么液晶技术又有哪些硬伤遭到OLED的威胁呢?
如果有人以“他会死”(没错,这确实是事实)来攻击一个人的人品,您觉得这样的攻击能够服人吗?《程序员》杂志有一篇《UML三大硬伤》(以下简称《程》文)。我们认为,《程》文作者在文中把建模语言,方法,工具,...
创业企业要设计一个股权架构,总得来说是,有利于公司整体的快速发展,而不是个别股东利益最大化: 1、维护创始人控制权。当然这种控制权是有益的,其目的是保障公司有一个最终的决策者。用控制权,树立创始人在...
专题资料
创业企业要设计一个股权架构,总得来说是,有利于公司整体的快速发展,而不是个别股东利益最大化: 1、维护创始人控制权。当然这种控制权是有益的,其目的是保障公司有一个最终的决策者。用控制权,树立创始人在团队...
让我最深有感触的一个情境...系统虽然不停的升级,但是核心的文档操作方式和方法并没有显著的改善,所以频繁双击、查找、另存都是系统的一个硬伤。为此,许多辅助软件得以出现以提高效率,Listary就是这类软件之一。
系统设计 1 jive设计思路 2 jive的工作内幕 3 Jive源代码研究 4 Jive中的设计模式 5 jive学习笔记 <br> 设计模式 1 大道至简-Java之23种模式一点就通 2 设计模式...
markdown是个好东西,用它写东西可以几乎不用考虑排版就可以得到还过得去的文章格式,作为...简书的编辑器虽然好用,但对我来说有几个硬伤: 不支持数学公式的编辑; 无法导出为pdf或html等其他格式; 只能在线编辑。
这里说的动态数组是可以根据需要动态增长占用内存的数组,比如程序初始分配了100个元素,可是运行了一段时间后区区100个空间不能满足了,现在需要400个,怎么办呢;那肯定需要再额外分配300个。 C语言有realloc()...
这个控件是基于CStatic派生的一个类,可放大缩小,带滚动条,想做成功能强大的(想做成一个视觉图片软件中的)控件,结果发现很难。。。 也还好,只能说够用。。bug也会不少,权当参考吧。这个static区域重绘,实再...
在对移动互联网还不了解的时候,我也曾想过设计手机网站...不错这确实是WAP页面的硬伤,但是做手机设计,我们考虑的不单单是这个“小”的问题,因为“手机的交互能力有限”这句话的内涵不只是体现在巴掌大的显示屏上。