模式的路在何方 ---- 不得不说的设计模式
关于设计模式,我在网上看过terry Li的那个系列和一些零散的,研读了《大话设计模式》,没看完《Heading first Design Patterns》,看了一本jolt大奖的设计模式。。。
浸染的时间不算太久,但是却有不说不快的感觉。
先从《大话设计模式》说起吧。作者可谓是深入浅出,通俗的语言,现实的例子。对于刚接触设计模式的人来说,确实比较perfect。先不诟病他那些例子是否都形象生动----毕竟一位语言大师曾说过,所有的比喻都是蹩脚的。单说它在设计模式中拼命的体现那一个个原则就很值得夸奖。这一点上,确实很对,那几个原则才是所有模式的魂魄。
本书讲解模式的时候都是怎么做的呢?首先从小菜那里引入低效的笨蛋的稚嫩的看法或者做法,然后大鸟堂而皇之的牵扯到一个模式,引导小菜去改造它的代码和一些架构之类的东西。接着把类图和演示代码给出。最后以简短的几句话或者更小的例子验证一下----一般都是大鸟和小菜开几句一点都不好笑的玩笑。
那么我归纳一下。作者一直是在用“设计模式”改造原有的思路或者代码。也许作者本人的高度已经不用把这个改造的过程体现出来,但我妄自揣度他确实是曾经有过或者现在把这个过程隐藏了而已。
这就是我要说的设计模式第一条路----改良主义路线。先把要做的东西搭建出来,然后再重构(思路或者代码)。
下面再说说那本jolt大奖的书籍,这个作者很推崇《建筑的永恒之道》,我也跟着兴奋的去网上down下来看,这叫一个晕,不怪很多人说这是一本哲学书籍。那么这本jolt大奖的作者显然水平是很高的,经常高屋建瓴的给我搞到想睡觉。就在我半梦半醒之间大概知道了一些他想表达的东西吧(姑且算我知道吧)。
他说他的传统做法或者老一套是这样的:首先着眼于问题域中的类或者对象的提取和构建,然后顺着他们之间的关系分配职责,然后我估计他就会按照这些已经七七八八的东西考虑设计模式的应用。如此就可以搭建出健壮的可以应对变化的等等具有一些好处的系统啦。但是后来,作者说当他真的把《建筑的永恒之道》里的观念使用出来后,他才成为了一个真正的设计师(好高的赞誉啊)。那么他是怎么使用里面的观念的呢?从简单到复杂,先想需要什么的是什么,再一点一点细化和复杂化(其实我怀疑在这一点上他一直都在这么干)。但在这个过程里,他首先用设计模式去思考整个问题,如果要使用已有的系统实现,但接口不对,需要adapter,如果有实现和抽象需要分离,那么需要bridge等等。只要发现哪些地方符合某种模式的应用,都把这个模式提取出来;接着把这些个模式放到一起,来比较,看哪一个是为其他模式铺设背景的,也应该是比较重要和最先使用的模式。于是按照这个模式去提取类和对象并且把这部分的系统架构搭好,然后再找出另一个模式,插进已有的架构,最后完成设计。
作者不是强调要用模式去思考,而是去找出背景模式然后一个模式一个模式的往进插入。
那么我姑且把这个算作设计模式的第二条路:原配路线。用模式去思考,用模式去实现。
最后我要说一种离奇的东西,大家都看过《倚天屠龙记》吧,张三丰在教张无忌太极剑的时候一直在问,你还记得多少?于是张无忌不负众望的全部忘记。张三丰诡异的笑了笑,“你去打吧!!!”么是否这也是一种设计模式的出路呢?无招胜有招,全无模式,全是模式?
姑且叫这条路是:不走寻常路。连模式都没有啦。还谈什么设计模式呢。
以上三种以后,我还要补充一种:根本没人走的路。在这条路上,人们很闲麻烦,所以根本不想抽象出来一个一个的层,也不想一个一个的打包,根本不搞间接,都直挺挺的上。
最后,关于这个设计模式,园子里的兄弟姐妹们,一线开发的“工人”们,指点江山的架构师们,在行业里浸淫已久的前辈们都有多少思考和看法呢?
兄弟是把砖头子抛出去了,下面看大家啦。。。
by 千冰念 @ YITIAN Studio
程序员的路是一行一行走出来的,不管多困难,我能做的只是,绝不低头。