这篇博客来源于我在组内的一次分享,我做了一些删减,并添加了其它一些元素,让它看上去更像是一篇博客。
这里我并不打算把23种设计模式从前到后的细讲一遍,而是提供一种想法,一种思路,算是我自己对设计模式的理解。真的想理解好设计模式,还是应该看《GOF》
所以首先我会抛出一些我的结论并尝试逐一的解释它们。
设计模式有点“过时”了。

那本被称为《GOF》的设计模式书,出版于1995年,而且书中大部分例子都围绕着桌面GUI开发,因为那是当年最火的模式,那我的理解,其实对于我一个做java后端开发的人来说,它其实有点过时了,比如里面类似“备忘录模式”,“命令模式”,“组合模式”这种,我可能一辈子都不会用到。再比如像是“迭代器模式”,“装饰器模式”这种,其实如今的语言已经默认都支持了。还有类似ioc控制反转这种,其实本身也可以算一种设计模式,但是因为理论和时间成熟相对较晚,并没有包含在GoF中,
所以也没必要在语言中,特别的去实现这一种模式了。总的来说,我想表达的一种思想就是:“只学习属于自己领域的那部分设计模式,其它的大概了解就行。”
放弃简单过于具体的模型,不要背类图,要从当时面临的问题思考设计模式。
你应该知道在学习设计模式的时候,有些类似《head first》,《大话设计模式》,这样的书籍,这些书籍看上去很好读,读起来很轻松很有趣,但是暴露一个严重的问题是,你只能大概听懂和了解这个模式是用来干嘛的,但是实际上你根本不知道怎么把它实践到具体的例子中。说简单点,根本没有什么地方,能让你写类似“飞机,大炮,坦克”的例子,你需要自己建立抽象思维来根据具体的场景,抽象出模型来。所以还是看原版的《GOF》好点,这本书首先会给你讲,到底我们在面临一个什么具体的case,然后针对这个case的设计模式是什么,在解决什么核心诉求,本质上来说,解决问题的场景,是设计模式的关键,如果你沉迷于背设计模式,背类图,那你会发现,很多设计模式的类图都差不多。
清晰的明白设计模式背后的思想:
划分好类的职责与边界。每个类只干好自己的事。
这个可以说是源于封装思想的基础,明确好每个类的职责,划分好边界。面向对象编程本身来说,就是一些对象的相互交互,本身就是对象与对象之间相互发送消息。所以设计一个对象,你要提供接口,限制类的访问权限,定义好类的协议。所以首先要符合最基本的建模思想,接下来再谈设计模式。
面向接口编程,把具体逻辑实现下沉到实现中。
简单的来说,就是面向接口编程,而不是面向实现编程,因为面向了接口编程,你可以让实现随意的被替换,这极大了增加的系统灵活性。不仅仅局限于对某个算法的实现细节下沉。还包括像创建者类的模式那样,把对象的创建,下沉到实现类中去。总之,设计模式总是看上去利用接口来做一个中间对象,从而实现了一个“缓冲区”,让你可以通过这个“缓冲区”间接地做很多事情。