面试时经常被问到一个问题:你懂设计模式么?
唔,面对这个问题我总是不知该如何回答,说懂么?好像除了个把模式外我实在是说不上多少模式的名称,更不用说画个UML图云云了,到现在为止好像我唯一能彻底领悟的只有工厂那一系模式外带上那个万恶的singleton,代理模式?肯定用过,但是不知道准确定义,委托模式?似乎也用过但是也不知道定义,适配器?好像也在代码中写过,不过同样,也不知道定义……
那么,到底什么是设计模式?到底什么是面向对象?怎样才算是懂了呢?
设计模式是什么?说穿了,它就是一套编码经验/代码套路的集合,用来解决某一类型的问题,那么,怎样才能算“懂”设计模式呢?把那个套路背下来么?那是注定无用的,那么,怎样算懂呢?至少,得在项目中用过,拿这套模式解决过问题,估计才能叫做懂吧,那么接下来一个问题就是:你在实际项目中到底用过哪些呢?
一个没用过?其实这不可能,只要你承担过建模的重任,只要你追求过代码的可重用性,可变性,那么,完全没用过任何一种设计模式是不太可能的,真正的问题在于:你会用,但是,你很少会知道你写出的代码到底算是哪种模式。特别是对于那些有很多变种的模式来说,想要弄清楚自己的代码究竟属于哪一种确实不是一件简单的事情。很可能出现的场景就是,你在看了GoF之后,才恍然发现:哦,我在某某项目中搭的那个框架就是啥啥模式啊
好吧,回到开头,如果你发现你处于这种情况,你到底算不算懂设计模式呢?

