學(xué)習(xí)設(shè)計(jì)模式帶來的思考
軟件總是會(huì)變化的惠豺。
抽象出來的部分應(yīng)該是穩(wěn)定的,如果你需要修改抽象部分风宁,那就說明抽象是失敗的洁墙。
但是你怎么知道目前的抽象是穩(wěn)定的呢? 世上并沒有先知戒财。
可以認(rèn)為抽象有保質(zhì)期热监,高手做出的抽象保質(zhì)期長(zhǎng),而低手做出的抽象保質(zhì)期短饮寞。
終究有保質(zhì)期孝扛。
軟件總要提供引入修改的地方或者叫提供適配變化的的地方。
找到變化的因素幽崩,反復(fù)權(quán)衡軟件的分離點(diǎn)苦始,這也是單一職責(zé)的精髓所在。
把易變的部分圈出來慌申,減少變更的關(guān)注點(diǎn)陌选。
如何學(xué)習(xí)設(shè)計(jì)模式
設(shè)計(jì)模式看了一遍書,當(dāng)時(shí)可能也理解到了具體模式的核心思想,但是過不了多久就又忘記了咨油。
然后又去看一遍書您炉,反反復(fù)復(fù),人生就在這種反復(fù)中過完了役电。
如何學(xué)好設(shè)計(jì)模式邻吭?
往大了想,如何學(xué)習(xí)一門軟件技術(shù)宴霸?如何學(xué)習(xí)學(xué)習(xí)一個(gè)概念囱晴?如何學(xué)習(xí)怎么學(xué)習(xí)?
這里我們先收回來瓢谢,集中在如何學(xué)習(xí)設(shè)計(jì)模式畸写。你當(dāng)然可以把你知道的任何學(xué)習(xí)方法用在學(xué)習(xí)設(shè)計(jì)模式上面。
人從外觀看起來是一樣的氓扛,但是由于背景的區(qū)別枯芬,人與人之間的區(qū)別很大,表現(xiàn)在心智模式的不同采郎。 也許不同人的大腦也是有細(xì)微差別的千所,身理的差異導(dǎo)致天才可能真的存在。你應(yīng)該有你自己的學(xué)習(xí)方法蒜埋。但是人類也應(yīng)該能抽象出人類共有的學(xué)習(xí)方式淫痰。
我這里困惑的是,我們需要反復(fù)去看設(shè)計(jì)模式的定義整份,理解它們的含義待错,一遍又一遍。這是低效的行為烈评。
那可能你會(huì)問火俄,你想學(xué)習(xí)到什么程度?你的目標(biāo)在哪里讲冠?
我期望當(dāng)別人說他在軟件實(shí)現(xiàn)中用到了某種模式的時(shí)候瓜客,我的大腦里就能立即放映出大概的邏輯關(guān)系。當(dāng)我需要實(shí)現(xiàn)某個(gè)軟件需求的時(shí)候竿开,設(shè)計(jì)模式都會(huì)跑出來谱仪,讓我在頭腦中篩選適合的模式甚至創(chuàng)造出合適的模式。當(dāng)我在閱讀別人代碼時(shí)候德迹,我能很快嗅到設(shè)計(jì)模式的蹤跡芽卿,進(jìn)而幫我更快的理解代碼表達(dá)的意圖。
你要怎樣學(xué)習(xí)設(shè)計(jì)模式才能達(dá)成上述目標(biāo)呢胳搞?
背誦定義卸例,我不確定這個(gè)是不是一個(gè)好的方法称杨。我想到了小時(shí)候背九九乘法口訣表。我們當(dāng)時(shí)并沒有理解乘法的內(nèi)涵筷转,也行根本就不存在所謂的內(nèi)涵姑原。但是我們就是硬生生的背誦了下來,以至于對(duì)我們后面的數(shù)字計(jì)算幫助巨大呜舒。
時(shí)時(shí)回味锭汛,當(dāng)腦袋裝滿了各種設(shè)計(jì)模式,在上班的路上袭蝗,在洗澡的時(shí)候唤殴,甚至上廁所的時(shí)候,它們可能就會(huì)蹦跶出來到腥,讓你反復(fù)的揣度朵逝。它們和你最近閱讀的代碼,最近寫的代碼進(jìn)行激烈碰撞進(jìn)而加深對(duì)它們的理解乡范,讓你能更好的設(shè)計(jì)出合適的軟件配名。
忘記設(shè)計(jì)模式,這一說法顯得玄幻了點(diǎn)晋辆。準(zhǔn)確說應(yīng)該是一種內(nèi)化渠脉,讓各種設(shè)計(jì)模式住在你的潛意識(shí)。當(dāng)你設(shè)計(jì)軟件的時(shí)候它們不自覺的出現(xiàn)了瓶佳,你認(rèn)為把它們是了一種理所當(dāng)然芋膘,甚至以為是你天生的直覺。