浅谈设计模式(概述)

本文是我对设计模式的个人观点,仅用来抛砖引玉:
设计模式,用比较书面化的语言来定义,如下:
是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。

这种定义,让专家来看可能会理解,但让初学设计的人员来看,或许太抽象,太模式,看完点头,回头犯愁,依然不知从何下手

首先列举在设计中常用的相关词汇,然后分别作解释:
1、高内聚,低耦合(High cohesion,Low coupling)
2、设计原则( Design principles )
3、设计模式( Design pattern )
4、框架(framework)
5、泛化(实现,继承),组合,聚合,关联
6、复用性,可扩展性,易维护性

我个人对这些名词作了一个总结如下:
内聚与耦合是很基础的两个概念,凡设计均要考虑(理论)
怎样做到高内聚,低耦合,这时就有指导方法,即设计原则(方法)
看完设计原则,不太明白怎么实现,实例说明,这些实例就是设计模式(实例)
模式有了,就需要有应用层的封装,即框架(某方面的产品)
内聚,耦合主要是类与类,模块与模块的关系,这些关系都有什么呢,有泛化(实现,继承),组合,聚合,关联.,你怎样定义这些关系,决定了程序的内聚和耦合度(涉及到的关系)
最终目的达到好的扩展性,高复用性,易维护性(目的)


下面我对这些概念再做一下解释,并举例说明:
高内聚:内聚就是一个模块内各个元素彼此结合的紧密程度,所谓高内聚是指一个软件模块是由相关性很强的代码组成,只负责一项任务,也就是常说的单一责任原则。
低耦合:一个完整的系统,模块与模块之间,尽可能的使其独立存在。
也就是说,让每个模块,尽可能的独立完成某个特定的子功能(从这里可以看出内聚高,本身就可以降低耦合)

这个理论很简单,但其实要具体情况具体分析,正如有人用下象棋形容做设计一样,即使你知道马走日,象走田,炮打一溜烟这种基本步骤,但要想下好象棋是需要大量更复杂的理论和经验的
内聚和设计原则中的单一职责一个道理,都是让本方法,本类,本模块的职责颗粒度最合适就好,如,
不够高内聚的例子有几种:
1、我们写个鸭子类,却有一个耕地的方法(根本不靠谱的设计)
2、我们写个鸭子类,里面有个疗伤的方法(看似也可以,但其实这个疗伤交给一个兽医类,可能更好,疗伤需要的参数可能是接口animal)
3、`我们有个Member会员类,有个属性叫登陆次数lTimes,本类有一个计数方法calTimes(),这种设计本无可厚非,但如果我们分析还有一个商品Production的类,里面有个属性叫点击次数hTimes,里面仍然有个计数方法calTimes(),这种设计就不太有内聚性了,我们可以将两个类中的calTimes()提到一个公共类出做calTimes(int times),这样显得Member与Production类显得更具有内聚性(可参考设计模式中的策略模式)
不够低耦合的例子有很多种,我认为大部分设计模式都是用来降低耦合的
但降低耦合可以表现在两个方面:
1、消除不恰当的依赖
2、通过其它方式依赖,可参考倚赖倒置原则

猜你喜欢

转载自lemonhandsome.iteye.com/blog/1843065