总结下我所学 设计模式

 

   ╮(╯▽╰)╭,,,.... 未必正确. 初学者慎重,本文系个人看法. 勿轻易接受.

从听说-接触-学习.快半年了吧....

自己感觉设计模式精华在于 一个解耦合的过程,不必强记,..尽管当时我通读完了

<大话设计模式>和老外的<head first 设计模式>,.之后有段时间在傻记.  o(╯□╰)o....

看到很多人在讲设计模式好处时说 >设计模式可以减少代码量啊,.减少重复代码..

减少劳动量啊啥的....恕在下不敢苟同.,..

我的理解是设计模式旨在运用一种思想,是前人总结出来的一种在程序中用于分离所描述事物中

的可能存在变化的情况的一种通用解决方案.称之为模式. 当然这些是基于面向对象语言的三大特性

基础之上的,(继承 多态 封装). 我认为好处在于 使得程序内部模块松耦合)①).从类的角度看高内聚(②).可协作编程.

最重要的是增强程序应对可能发生的变化的能力.(③)/对于日后产品升级,有非常大的好处.

面向对象语言三大特性之一:

封装:相对过程式语言来讲,

继承:

多态:

设计模式几大基本原则:

1..开放封闭原则(Open-Closed Principle):      "对于扩展是开放的,对于修改是关闭的",但是不大可能完全封闭,一个好的设计是在不修改源代码的情况下,可以扩展功能..而实现开闭原则的关键就是抽象出超类接口,以隔离可能发生的变化.     在"开-闭"原则中,允许扩展具体的实现类,抽象类和接口在"开-闭"原则中扮演着极其重要的角色...即要预知可能变化的需求.又预见所有可能已知的扩展...抽象是关键!-------但是对于一个新的问题,如何提取出抽象来隔离这些变化呢?  (遗留问题).

2.里氏代换原则(Liskov Substitution Principle LSP):    

       这是一个女人最先提出来的.对于这个原则,我们有一点可以确定,;那就是-->她老公是姓"里 ",(英文好像是Liskov ).而且她老人家提出来的:"一个软件实体如果使用的是一个基类的话那么一定适用于其子类,而且它察觉不出基类对象和子类对象的区别。也就是说,在软件里面,把基类都替换成它的子类,程序的行为没有变化。".这个应该是在真正的面向对象语言出现之前提出来的指导思想.! 要不然这么个东西怎么好意思说出口..!本来就是人家面向对象语言的特性之一.

3. 依赖倒转原则:

      要依赖抽象,而不要依赖具体的实现..如果说开闭原则是目标,依赖倒转原则是到达"开闭"原则的手段..要达到松耦合的设计目标,就应该尽量的遵守依赖倒转原则.以使得程序间的相互依赖减少.依赖倒转原则就是要求将类"抽象化"以隔离变化的影响!! 

4.迪米特法则(这个跟<head first 设计模式>里的最少知识原则好像是一个意思):

      系统中的类,尽量不要与其他类互相作用,减少类之间的耦合度,因为在你的系统中,扩展的时候,你可能需要修改这些类,而类与类之间的关系,决定了修改的复杂度,相互作用越多,则修改难度就越大,反之,如果相互作用的越小,则修改起来的难度就越小..

当然也不是仅局限于修改啦,上面的话有缺陷... 当一个类与很多类出现直接联系的时候,这个类或者是类库的可复用性也就大大的降低了,lon余(他妈的这个字打不出来.见笑),和耦合度大大增加,...也就成了我等鸟辈写的代码了.....

5.接口隔离法则:

      

这个法则与迪米特法则是相通的,迪米特法则是目的,而接口隔离法则是对迪米特法则的规范..为了做到尽可能小的耦合性,我们需要使用接口来规范类,用接口来约束类.要达到迪米特法则的要求/松耦合的设计--->使用接口隔离法则.

注释 :

①":松耦合:松耦合架构降低整体复杂性和依赖性。松耦合使应用程序环境更敏捷,能更快地适应更改,并且降低了风险。除此之外,系统维护也更方便

②:高内聚:衡量模块独立性的定性标准是内聚(一个模块内各个元素彼此结合的紧密程度)

③:运用上面所述的:

      1.开放封闭原则(Open-Closed Principle),

      2.里氏代换原则(Liskov Substitution Principle LSP): 

      3. 依赖倒转原则:....

以应对需求变更.环境变更等变化.....

到睡觉时间了.洗个澡,睡觉! 明天七点起来跑步.


原文地址:https://www.cnblogs.com/ToDoToTry/p/1505444.html