在程序設(shè)計過程中嚣崭,最頭痛的不是邏輯的編寫過程,更不是算法的設(shè)計芦劣,最頭痛的是如何設(shè)計出一個容易維護说榆,擴展性好的東西签财。而耦合問題是最令人煩躁的唱蒸,它的存在很多人發(fā)現(xiàn)不了,所以往往無從入手神汹,真是有苦自己知了慎冤,呵呵蚁堤。以下是我的經(jīng)驗之談。我通過例子來體現(xiàn)耦合問題的影響撬即。
第一個例子: 在開發(fā)游戲的時候剥槐,有很多實體類粒竖,通常屬于一條相同的生產(chǎn)線几于,如地形:土地,石塊朽砰,草地瞧柔,雪地造锅,沼澤,等券坞,具有相同特征而功能不同的對象肺素,新手們倍靡,一般是在程序的某個地方塌西,默默地new出這些應(yīng)用到的對象,恩捡需,一個站辉,兩個饰剥,三個汰蓉,慢慢你會發(fā)現(xiàn)程序中不斷出現(xiàn)新對象棒卷,如果存在10對象實體比规,而對象的提供了5個接口函數(shù),也就是盹沈,讀寫操作乞封,在程序中出現(xiàn)了幾十次,這時锚贱,我不要這個對象了拧廊,換成其他了吧碾,那你是不是要改幾十處地方墓卦?恩倦春,問題就是這里了,沒有一個抽象層面落剪,必然會導(dǎo)致維護困難睁本,當(dāng)對象擴大化到100個,這是一個維護噩夢忠怖,當(dāng)然呢堰,單單一個抽象層面是無法解決new實體對象的事實的,這個是令人頭痛的問題凡泣,管理對象的生產(chǎn)是一個很重要的模塊枉疼,這里對于某些高級語言,如C++问麸,唯一比較好緩解的是工廠模式中的工廠方法往衷,我比較喜歡用這個模式去管理對象,簡單工廠就不要學(xué)了严卖,沒什么實際意義哮笆,而我可以很明確告訴你,第一個帶你入門滑黔,第一個讓你打開眼界的模式絕對是工廠方法模式,如果真想學(xué)模式,請先研究工廠方法,其使用的意義在于把對象的生成延遲到子類派哲,而統(tǒng)一使用接口去管理對象的初始化巢寡,把變化點分離出調(diào)用端舆蝴,這里我只能告訴你為什么要用設(shè)計模式层皱,什么情況下要用瓮增,理不理解就靠你自己的實際經(jīng)驗和悟性了凡资,本人悟性不高吩谦,當(dāng)時在學(xué)習(xí)設(shè)計模式的時候滑废,看了很多次依然沒有領(lǐng)悟到工廠模式的奧妙,直至代碼量和項目經(jīng)驗不斷地增加才頓悟出個中道理,確實是很難用文字來表達腊状,不過以上的例子足夠證明它的意義映屋,根源都是為了解耦湾蔓。
第二個例子: 由于我一直都在開發(fā)游戲傻丝,所以所舉得例子不免都和游戲有關(guān),這個例子温算,如果你寫過一個完整的游戲巩割,必然有所了解闻丑,游戲總會有界面酸钦,而其中比較典型的界面是蚕断,菜單界面葛假,菜單里有按鈕,對吧恢氯?恩带斑,這個問題勋磕,我當(dāng)時設(shè)計就考慮,菜單類和按鈕類究竟是分開還是合在一起?想來想去团秽,由于當(dāng)時設(shè)計觀念沒到家图毕,最后把它們合在一起了,這種做法絕對是不好的柒竞,為什么呢?我們不要從概念上入手解釋霹娄,通俗的講法就是能犯,菜單和按鈕的對應(yīng)關(guān)系是一對多鲫骗,對吧?沒有一種固定的關(guān)系踩晶,有可能1對2执泰,1對3,1對10等等渡蜻,所以把它們寫在一起术吝,是很僵化的,就單憑這種證明就可以發(fā)現(xiàn)茸苇,它們要分開排苍,而它們最后的表現(xiàn)是合在一起,通過組合的方式学密,把按鈕的抽象層面注入到菜單里面淘衙,就可以動態(tài)地生成完整的菜單,所謂的組合方式腻暮,不就是彤守,菜單里面有一個存放按鈕引用的集合,希望你明白我所說的哭靖,具體我就不解釋了具垫。
?結(jié)語:我認為這里是全篇文章最重要的,比任何所謂的分層理論都重要试幽,因為它更通俗筝蚕,更實際,很多人铺坞,并不是面向?qū)ο?/a>學(xué)得不好起宽,但總覺得差什么,我也經(jīng)歷過康震,面向?qū)ο?/a>燎含,封裝,多態(tài)腿短,繼承,學(xué)過的人都知道绘梦,都認為自己了解了橘忱,其實不然,很多很奇妙的因素卸奉,讓你誤解了钝诚,大部分的人認為封裝很簡單,其實大錯特錯了榄棵,封裝是最奇妙的凝颇,也是最難用好的潘拱。只要你記住以下原則,必然能很好地用好封裝拧略,成員盡量使用protected和private,不要去使用public.盡量不要提供給外部對成員屬性getter的接口,意思就是不要暴露成員乓旗,為什么要這樣呢嗤攻?很簡單,暴露成員屬性必然會導(dǎo)致自身業(yè)務(wù)的外泄袱饭,業(yè)務(wù)外泄川无,會導(dǎo)致,類之間的無謂耦合虑乖,如A類有成員a,而程序需要對a數(shù)據(jù)改變懦趋,而你提供一個B類可以訪問a成員的getter接口,B類在其自身對a修改疹味,看上去沒什么愕够,實際上,就是類耦合佛猛,對a的修改是類A的職務(wù)惑芭,由于習(xí)慣的提供getter,導(dǎo)致了继找,在寫類B的時候錯誤地添加了修改業(yè)務(wù)遂跟,使類A內(nèi)聚能力降低,程序逐步龐大必然會越發(fā)明顯婴渡,真所謂牽一發(fā)動全身幻锁,小程序確實是很難看出問題所在。
就寫那么多边臼,本人愚見哄尔,希望對你有幫助。