学习设计模式带来的思考
软件总是会变化的。
抽象出来的部分应该是稳定的,如果你需要修改抽象部分,那就说明抽象是失败的。
但是你怎么知道目前的抽象是稳定的呢? 世上并没有先知。
可以认为抽象有保质期,高手做出的抽象保质期长,而低手做出的抽象保质期短。
终究有保质期。
软件总要提供引入修改的地方或者叫提供适配变化的的地方。
找到变化的因素,反复权衡软件的分离点,这也是单一职责的精髓所在。
把易变的部分圈出来,减少变更的关注点。
如何学习设计模式
设计模式看了一遍书,当时可能也理解到了具体模式的核心思想,但是过不了多久就又忘记了。
然后又去看一遍书,反反复复,人生就在这种反复中过完了。
如何学好设计模式?
往大了想,如何学习一门软件技术?如何学习学习一个概念?如何学习怎么学习?
这里我们先收回来,集中在如何学习设计模式。你当然可以把你知道的任何学习方法用在学习设计模式上面。
人从外观看起来是一样的,但是由于背景的区别,人与人之间的区别很大,表现在心智模式的不同。 也许不同人的大脑也是有细微差别的,身理的差异导致天才可能真的存在。你应该有你自己的学习方法。但是人类也应该能抽象出人类共有的学习方式。
我这里困惑的是,我们需要反复去看设计模式的定义,理解它们的含义,一遍又一遍。这是低效的行为。
那可能你会问,你想学习到什么程度?你的目标在哪里?
我期望当别人说他在软件实现中用到了某种模式的时候,我的大脑里就能立即放映出大概的逻辑关系。当我需要实现某个软件需求的时候,设计模式都会跑出来,让我在头脑中筛选适合的模式甚至创造出合适的模式。当我在阅读别人代码时候,我能很快嗅到设计模式的踪迹,进而帮我更快的理解代码表达的意图。
你要怎样学习设计模式才能达成上述目标呢?
背诵定义,我不确定这个是不是一个好的方法。我想到了小时候背九九乘法口诀表。我们当时并没有理解乘法的内涵,也行根本就不存在所谓的内涵。但是我们就是硬生生的背诵了下来,以至于对我们后面的数字计算帮助巨大。
时时回味,当脑袋装满了各种设计模式,在上班的路上,在洗澡的时候,甚至上厕所的时候,它们可能就会蹦跶出来,让你反复的揣度。它们和你最近阅读的代码,最近写的代码进行激烈碰撞进而加深对它们的理解,让你能更好的设计出合适的软件。
忘记设计模式,这一说法显得玄幻了点。准确说应该是一种内化,让各种设计模式住在你的潜意识。当你设计软件的时候它们不自觉的出现了,你认为把它们是了一种理所当然,甚至以为是你天生的直觉。