如果你仔细观察那么多设计模式,会发现它们基本上都是在讲一件事:接口的抽象、分层、去耦合, 就像 #26 楼 @
NoOneNoBody 说的。把这点仔细研究研究,就豁然开朗了。
举几个例子,
「观察者模式」: 某个对象变动了,通知其他对象(或者说其他对象观察某个对象的变动)。 这种“一变动就通知”的机制,主要用于底层对象向上层对象发送通知,对于这些通知,无论上层对象是处理还是不处理,无论上层具体怎样处理,都跟底层对象没有关系了。所以观察者模式,其实是将底层对象的向上通知这种(接口)行为统一抽象出来了,而且去掉了底层与上层的耦合。
「访问者模式」:将被访问的数据结构的遍历抽象出来了,上层要访问某个比较固定的数据结构的时候,不用每个访问者把遍历这个数据结构的代码都重复写一遍,只需要写出来对该数据结构如何具体操作,遍历这个数据结构的过程已经被“访问者模式”抽象和剥离出来了。像 C++ stl 的迭代器也可以算是非常典型的访问者模式,只需要 iterator++就可以,不用关心底层是 vector 还是 list 。
「工厂模式」:这个就更直接了,传给工厂一个不同的参数,生成一个与之对应的实例,并且这些实例都实现了一个相同的接口。具体生产哪个类的实例不需要关心,唯一需要关心的就是,传入一个不同的参数,得到同一个接口的不同实现,经过这种抽象后,工厂模式对外呈现出一种极为简洁的形式:不同参数->接口的不同实现。
所以学习的时候,只要仔细留心接口是怎样抽象的,接口抽象出来后,达到了什么目的和效果,就可以了,不用特意记各种设计模式,死记也记不住。