前言:設(shè)計(jì)模式幾乎是程序員必修的一門課程,而能夠深入理解和運(yùn)營(yíng)設(shè)計(jì)模式更是程序員向架構(gòu)師進(jìn)階的必備技能。但是,實(shí)際上,很多人對(duì)設(shè)計(jì)模式的理解僅僅停留在表面,甚至還因?yàn)榇a中使用了設(shè)計(jì)模式而洋洋自得——而根本不管這是否必要!
理解GOF(Gang of Four,指撰寫《設(shè)計(jì)模式》的四位作者)設(shè)計(jì)模式對(duì)于程序員而言是十分有價(jià)值的。當(dāng)然,相對(duì)于理解,大部分設(shè)計(jì)模式的擁躉看起來僅僅是使用他們。甚至,在有些時(shí)候過度使用。
Java的Spring框架其中臭名昭著的一點(diǎn)是充斥著類似SimpleBeanFactoryAwareAspectInstanceFactory名稱的類。至于其中命名是否簡(jiǎn)便性和設(shè)計(jì)模式是否正確運(yùn)用這個(gè)由讀者自己評(píng)判,但是就我本人而言,是十分討厭看到這樣的東西的。
設(shè)計(jì)模式可以拆分為四個(gè)大的類型:行為型、結(jié)構(gòu)型、并行型和創(chuàng)建型。創(chuàng)建型,如同名稱所示,是講述如何編寫創(chuàng)建各類對(duì)象實(shí)例的代碼,例如工廠類。這是用于編寫可復(fù)用、可測(cè)試和模塊化代碼的合集。大部分依賴注入(DI)和控制反轉(zhuǎn)(IOC)框架是應(yīng)用了創(chuàng)建型的設(shè)計(jì)模式。
然而,這給人造成了直接調(diào)用構(gòu)造函數(shù)創(chuàng)建對(duì)象的方式是很Low的錯(cuò)誤印象。例如,Emiko就發(fā)現(xiàn)了如下的Java代碼:
/**
* Creates an empty {@link MessageCType}.
* @return {@link MessageCType}
*/
public static MessageCType createMessage() {
MessageCType retVal = new MessageCType()
return retVal;
}
這僅僅是一個(gè)替換構(gòu)造函數(shù)的方法,類似的代碼就像成堆的垃圾一樣在項(xiàng)目里隨處可見。如果是他們把這個(gè)方法應(yīng)用于流式編程中創(chuàng)建對(duì)象的話還情有可原。然而……他們并沒有,實(shí)際上最終的調(diào)用代碼是這樣的:
MessageCType msg = MessageCType.createMessage();
msg.type = someMessageType;
msg.body = …
由此,Emiko總結(jié)到:“在工作中,我們顯然在為自己使用了高大上的設(shè)計(jì)模式而感到自豪!”