不要為了使用設(shè)計(jì)模式而使用設(shè)計(jì)模式,這并不牛!

前言:設(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ì)模式而感到自豪!”

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容