關(guān)于程序解耦的一些分享

在程序設(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ā)動全身幻锁,小程序確實是很難看出問題所在。

就寫那么多边臼,本人愚見哄尔,希望對你有幫助。

  • 序言:七十年代末柠并,一起剝皮案震驚了整個濱河市岭接,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌臼予,老刑警劉巖鸣戴,帶你破解...
    沈念sama閱讀 222,807評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異粘拾,居然都是意外死亡窄锅,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評論 3 399
  • 文/潘曉璐 我一進店門缰雇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來入偷,“玉大人追驴,你說我怎么就攤上這事∈柚” “怎么了殿雪?”我有些...
    開封第一講書人閱讀 169,589評論 0 363
  • 文/不壞的土叔 我叫張陵,是天一觀的道長体捏。 經(jīng)常有香客問我冠摄,道長,這世上最難降的妖魔是什么几缭? 我笑而不...
    開封第一講書人閱讀 60,188評論 1 300
  • 正文 為了忘掉前任河泳,我火速辦了婚禮,結(jié)果婚禮上年栓,老公的妹妹穿的比我還像新娘拆挥。我一直安慰自己,他們只是感情好某抓,可當(dāng)我...
    茶點故事閱讀 69,185評論 6 398
  • 文/花漫 我一把揭開白布纸兔。 她就那樣靜靜地躺著,像睡著了一般否副。 火紅的嫁衣襯著肌膚如雪汉矿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,785評論 1 314
  • 那天备禀,我揣著相機與錄音洲拇,去河邊找鬼。 笑死曲尸,一個胖子當(dāng)著我的面吹牛赋续,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播另患,決...
    沈念sama閱讀 41,220評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼纽乱,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了昆箕?” 一聲冷哼從身側(cè)響起鸦列,我...
    開封第一講書人閱讀 40,167評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎为严,沒想到半個月后敛熬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,698評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡第股,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,767評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了话原。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片夕吻。...
    茶點故事閱讀 40,912評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡诲锹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出涉馅,到底是詐尸還是另有隱情归园,我是刑警寧澤,帶...
    沈念sama閱讀 36,572評論 5 351
  • 正文 年R本政府宣布稚矿,位于F島的核電站庸诱,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏晤揣。R本人自食惡果不足惜桥爽,卻給世界環(huán)境...
    茶點故事閱讀 42,254評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望昧识。 院中可真熱鬧钠四,春花似錦、人聲如沸跪楞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽甸祭。三九已至缕碎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間池户,已是汗流浹背咏雌。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留煞檩,地道東北人处嫌。 一個月前我還...
    沈念sama閱讀 49,359評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像斟湃,于是被迫代替她去往敵國和親熏迹。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,922評論 2 361

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,332評論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理凝赛,服務(wù)發(fā)現(xiàn)注暗,斷路器,智...
    卡卡羅2017閱讀 134,716評論 18 139
  • 沒時間用4a紙畫墓猎,隨手涂鴉也是可以滿足一下的捆昏,嘻嘻……
    四丫xmh閱讀 866評論 2 4
  • 1. 中文顯示Unicode python的json.dumps方法默認會輸出unicode類型。 解決方法要輸出...
    大明白閱讀 1,998評論 0 51
  • 平時每天花半小時到一小時時間畫毙沾,每天晚上丫頭睡覺之后開始畫畫骗卜,畫的時候是意猶未盡的感覺,畫著畫著就忘記時間了,畫的...
    明日之月閱讀 576評論 0 4