前言:接触和使用设计模式都比较早,至少也是3年多以前的事儿。可惜,那时候初出茅庐,思想觉悟也不太高,上面说用什么,就用什么,缺乏了自己的思考。在这次的离职交接过程中,发现系统中有好些处都有设计模式的影子,遂决定,将设计模式重新总结一遍,并记录一些自己的思考!
一、宏观导图总结
二、本次思考的问题
2.1,为什么设计模式被划分为三种类型
这个问题的答案,根本在于分类的意义是什么???? 我现在认为,将设计模式分为三种类型,是为了便于我们在解决具体问题的时候能够快速的找到合适的设计模式。比如说,是系统结构有问题,那么我们直接去结构型里面找。缩小寻找范围,提高解决问题的效率!
2.2,为什么会是结构、创建、行为这三种
这个问题,我想了好久,就是说分类的好处是明白了,但为什么设计模式的类型是这几种,而不是别的类型。 我记得我之前有个小伙伴给我说过他对于这三种类型的理解:构造函数,就相当于是创建型;每个方法定义,就相当于是行为型;而整个类,就是结构型! 他说的这个观点就帮助我打开了一点思路。 首先,我们回忆,什么是设计模式???
设计模式Design Pattern:是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码、让代码更容易被他人理解并且保证代码可靠性。一个设计模式,是一个已被记录的最佳实践或一个解决方案。这个最佳实践或解决方案已被成功应用在许多环境中,它解决了在某种特定情境中重复发生的某个问题。
我后来自己进行归纳总结,设计模式是用来解决问题的经验,那我们在软件开发过程的常见问题,都是由于那些原因导致的呢??? 结合到自己的项目经验,顿悟为什么会是结构、创建、行为!
2.3,这几个原则,是如何在设计模式中体现的
首先,图中的5个原则,是OO的设计原则。在设计模式中,还有一个迪米特法则。我个人认为,每一个设计模式都包含了所有原则的思想,但具体的,我一时半会儿也说不上来!如果有人有明确的见解,交流一下!!!
2.4,这几个原则还在哪些地方有体现
上一个问题说到,5个原则是OO的设计原则,在面向对象的程序设计中,随处都能看到这些原则的影子!
2.5,每一种类型中的设计模式都有什么联系
最开始,我学设计模式都是一个一个学,宏观上的把握体会并不深。这也是比较吃亏的地方,因为我把简单的东西学难了,学复杂了!!!这次我是把所有的设计模式都放到了一个平面上去观察,终于发现了一些关系,比如说在结构型模式中,我将Composite和facade都标记了many,是因为我发现组合和外观,一般都是多个组件的融合。而Adapter和Bridge,我标记了Dubbo,对于这两个我更多的认为是两个对象之间的结构整合。
2.6,如何更高效率的、合理的使用这些设计模式
首先:我现在认为,我们在决定使用设计模式解决问题的时候,首先选择的,应该是某一类,而不是某一个。这一点就跟我以前不一样,以前可能觉得,哎呀,这儿问题好像可以用某某某设计模式解决,但是,我一直都抓不住问题的本质,迷迷糊糊的就那么过去了,只是看到了一个形。
其次:结构型的设计模式,一旦使用,动荡都相对较大,改的是宏观体系!所以,在解决问题的时候,咱们还是应该做减法,先确定结构没毛病,再看看创建这个对象的方式有没有毛病,最后看行为! 就跟教育小孩儿一样,先确定这个小孩儿的问题,属于行为内容的问题,还是行为方式的问题,或是思想有问题。 咱们先解决大面上的东西,在软件设计中,如果一个软件的结构出毛病了,行为再好。。。。