最近看了不少关于设计模式的东东,是应该总结一下下了,呵呵,纯属个人观点,有些题目比较大,只是说说我的看法吧,如有不当之处,敬请板砖轻点。
程序员的成长用修炼这个词形容真是恰当,修炼当然也分内功和外功了,像我们平时使用的什么Ext、Flex、Struts、Spring,如果你只是会使用, 那么也就是会这些外功了,当然你也能从这些外功的修炼中,体会到内功的重要以及内功的某些门路。外功很强,但是内功弱,同样的外功,在内功强的人手里会出神入化。
欧阳峰和十几岁的杨过都会蛤蟆功 就是比蛤蟆功 肯定是欧阳峰厉害了。为什么?欧阳峰内功厉害阿。设计模式就是很厉害的内功.
在项目中,我们发现貌似我们没有用那些模式阿??那些东东难道只是看上去很美??
其实毋庸置疑,设计模式肯定是老前辈们辛辛苦苦修炼总结出来的内功大法,而且绝对是让你功力大增的内功秘籍,那么什么时候用呢?怎么使用呢??有什么要注意的呢??
好,下面开始。。。。。
1、什么时候使用设计模式呢??
敏捷以及极限编程中倡导不预先设计,不会首次使用设计模式,
我个人认为如果设计师发现是明显的需要使用设计模式,明显地属于设计模式的经典场合,那么毫不犹豫的使用,
如果发现另外的设计引入了代码坏味那么也是毫不犹豫的使用.
如果发现使用设计模式的地方可以明显提高灵活性 我也毫不犹豫的使用。
大多数开发人员还是做企业级应用,大多数人是做项目,设计模式就是先找到变化的部分并且提取出来进行封装,怎么找到变化的部分呢??
我想还是从作产品的角度,在系统地设计开发中,发现变化的部分,想想这块逻辑是不是这个项目独有的呢??
当然,你在开发的过程中,会发现某些代码属于坏味或者很适合使用设计模式呢,那么都是些什么场合呢??可以详见《重构与模式》
2、怎么防止过度设计呢??
使用设计模式,但是防止过度设计,那么怎么区分是过度设计呢?让我们去依靠嗅觉寻找代码坏味,不断重构吧
过度设计的坏味包括哪些呢?
(1)继承结构层次太多造成过度复杂
(2)继承与聚合不能分清楚 优先使用聚集而不是继承应该使用接口还是抽象类
继承本身没有错,关键主要是继承了不该继承的方法,这时候很可能导致增加继承类的层次,采用继承也不能像策略模式那样动态或者说运行时变化行为。
(3)过度抽象了你的接口
接口过度抽象往往造成不必要的复杂性,比如一些有时候看到很多类继承类似Common***的类,我个人认为这个时候就需要考虑是不是需要继承
(4)全局的公用类
我们为了在某个项目中复用某些静态方法,往往写了个大杂烩的类,包含了很多公用的方法,或者staticfinal的域.貌似好像提高了复用,实际上项目中大多数包
依赖于这种代码,造成不易拆解进行单元测试,不符合测试驱动的思想,而依赖这些类的包也往往会依赖一些本身不使用的接口,违反了接口隔离原则。
3、设计模式增加了设计复杂度,怎么办??
设计模式增加了复杂度,但是这是相对的。
一方面阅读代码的人需要有设计模式的基本知识,了解设计模式的基本结构,这样可以很快地意识到这是在使用什么模式。
一方面书写代码的人需要在代码中以清晰设计意图的名称去命名你的代码,比如你想表达策略模式那么使用****stragey,你想表达装饰意图那么使用****Decrator,你想使用代理那么命名为****Proxy,这样阅读代码的人可以很快了解你的设计意图
4、有人说为什么在我的程序中没有使用设计模式呢??
其实,使用设计模式的地方一定也可以采用过程化的思想去解决,只不过这种代码灵活性不高,不满足某些设计原则如开闭原则罢了。
很可能你的代码中就是存在很多这种过程化的代码,存在类的职责不清,职责过大的类或者是方法,也就是说你解决了你项目中的问题,但是灵活性不够,如果作产品,往往需要大面积的修改。
如果你做框架那么为了让他人扩展,设计模式是逃不过的,
如果你做企业级应用,某个项目业务逻辑虽然很复杂,但是共性的问题少,这个也是有可能的,但是也有可能你没有一双慧眼,很可能说明你不熟悉设计模式,这个原因往往是最主要的。比如你现在对代理、装饰意图区别、模板、策略的意图区别了然于胸吗?如果不是,那么还是不了解。
当然有时候我们并不是为了使用设计模式而使用设计模式,其实完全可以按照某些经典的设计原则去推导出某种设计结果,推导出来你发现哦原来他就是这个设计模式,当然在这个过程中,你也会发现你熟悉的某些模式帮助你得到了很好地设计,呵呵。
也有可能你使用了设计模式,但是不知道它是一种模式。
5、不能只是关注设计模式阿
如果你只是学某些设计模式,你可能理解不深刻,有些面向对象的设计原则是肯定要熟悉并且深刻理解的。
(1)单一职责原则
(2)开闭原则
(3)里氏替换原则
(4)接口隔离原则
(5)这里不详细谈了
5、推荐几本书
《设计模式解析》第二版
《Head First 深入浅出设计模式》
《敏捷 模式、原则、实践》(书名不确切)
《重构--改善既有的代码》
《重构与模式》
都是经典,都与jolt大奖有关,其中就有不少讲解设计模式的,在这里我不得不提下《Head First 深入浅出设计模式》我个人认为是本很不错的书,读起来十分有趣,而且讲解十分到位,有一针见血的感觉。
《设计模式解析》第二版讲解非常清晰,就像是一位教授给你上课,还有习题,很正统,也非常好。
分享到:
相关推荐
创建型模式是将对象的创建和使用分离开来的设计模式。它可以使系统更加灵活和可扩展。 1. FACTORY 模式 FACTORY 模式是将对象的创建和使用分离开来的设计模式。客户端不需要知道对象的创建细节,只需要向工厂请求...
如果你想要深入透彻地理解和掌握设计模式,并期望能真正把设计模式应用到项目中去,那么这是你不可错过的一本好书。 《研磨设计模式》难度为初级到中级,适合与所有开发人员、设计人员或者即将成为开发人员的朋友。...
解释器模式将描述怎样 在 有了一个简单的文法后, 使用模式设计解释这些语句。 在解释器模式里面提到的语言是指任 何解释器对象能够解释的任何组合。在解释器模式中需要定义一个代表 文法的命令类的等 级结构,也...
如果你想要深入透彻地理解和掌握设计模式,并期望能真正把设计模式应用到项目中去,那么这是你不可错过的一本好书。 《研磨设计模式》难度为初级到中级,适合与所有开发人员、设计人员或者即将成为开发人员的朋友。...
如果你想要深入透彻地理解和掌握设计模式,并期望能真正把设计模式应用到项目中去,那么这是你不可错过的一本好书。 《研磨设计模式》难度为初级到中级,适合与所有开发人员、设计人员或者即将成为开发人员的朋友。...
标题:“深入浅出设计模式(英文扫描版)” 描述:“可以了解设计模式 还可以学习...《深入浅出设计模式(英文扫描版)》无疑是一本值得推荐的好书,它将带你进入设计模式的世界,开启一段技术与语言双丰收的学习之旅。
如果你想要深入透彻地理解和掌握设计模式,并期望能真正把设计模式应用到项目中去,那么这是你不可错过的一本好书。 《研磨设计模式》难度为初级到中级,适合与所有开发人员、设计人员或者即将成为开发人员的朋友。...
如果你想要深入透彻地理解和掌握设计模式,并期望能真正把设计模式应用到项目中去,那么这是你不可错过的一本好书。 《研磨设计模式》难度为初级到中级,适合与所有开发人员、设计人员或者即将成为开发人员的朋友。...
同时,“[浪曦原创]JAVA设计模式 第1讲 抽象类与适配器模式(jzkangta).exe”应该是一个视频教程,可以帮助你更直观地学习。PPT文件“抽象类与适配器模式.ppt”则可能是教学幻灯片,列出了关键点和示例。最后,“demo...
如果你想要深入透彻地理解和掌握设计模式,并期望能真正把设计模式应用到项目中去,那么这是你不可错过的一本好书。 《研磨设计模式》难度为初级到中级,适合与所有开发人员、设计人员或者即将成为开发人员的朋友。...
今天我们要探讨的是“Java设计模式之结构型模式”。结构型模式主要关注如何组织类和对象,以达到良好的架构,提升代码的可读性和可维护性。在这个主题中,我们将深入理解并讨论这些模式的原理、应用场景及其实现。 ...
策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在Java编程语言中,尤其是在Android平台上,这种模式能够使我们的代码更加灵活、可扩展且易于维护。 策略模式的核心思想是定义一系列算法,并将每个...
设计模式是软件开发中的重要概念,它是一套被广泛使用并经过验证的解决方案,用于解决在软件设计过程中常见的问题。今天我们要探讨的是“中介者模式”,一种在对象间建立通信桥梁的设计模式,它使得原本直接相互依赖...
今天我们将深入探讨三种主要的设计模式:简单工厂、工厂方法和抽象工厂。 ### 简单工厂模式 简单工厂模式是一种创建型设计模式,它提供了一个静态方法来创建对象,而无需暴露创建逻辑。这个静态方法根据输入参数来...
今天,我们将讨论两种常用的Java设计模式:状态模式和模板模式。 状态模式(State Pattern) --------------------- 状态模式是一种行为型设计模式,它允许对象在内部状态改变时改变它的行为。状态模式将状态封装...
JAVA设计模式和J2EE设计模式 JAVA设计模式是软件开发中一种常见的设计模式,用于解决软件设计中的一些常见问题。JAVA设计模式可以分为三大类:创建型模式、结构型模式和行为型模式。下面是对每种模式的详细介绍: ...
如果你想要深入透彻地理解和掌握设计模式,并期望能真正把设计模式应用到项目中去,那么这是你不可错过的一本好书。 《研磨设计模式》难度为初级到中级,适合与所有开发人员、设计人员或者即将成为开发人员的朋友。...