開發(fā)過程中棉安,我們經(jīng)常會(huì)用到第三方包,開放源碼或者二方包青责,不管是哪種情況做裙,我們都得將外來代碼干凈利落地整合進(jìn)自己的代碼中肛鹏。 外來代碼的問題 1烟逊、在接口提供者和使用者之間蜓席,存在與...

開發(fā)過程中棉安,我們經(jīng)常會(huì)用到第三方包,開放源碼或者二方包青责,不管是哪種情況做裙,我們都得將外來代碼干凈利落地整合進(jìn)自己的代碼中肛鹏。 外來代碼的問題 1烟逊、在接口提供者和使用者之間蜓席,存在與...
使用非受檢異常 受檢異常每個(gè)方法的簽名都列出它可能傳遞給調(diào)用者的異常衷旅。如果簽名與代碼實(shí)際所做之事不符捐腿,或者調(diào)用者忽略了異常處理,代碼在字面上就無法編譯柿顶。 代價(jià)是如果你在方法中...
數(shù)據(jù)抽象 隱藏實(shí)現(xiàn)并非只是在變量之間放上一個(gè)函數(shù)層那么簡(jiǎn)單茄袖。隱藏實(shí)現(xiàn)關(guān)乎抽象!類并不簡(jiǎn)單地用取值器和賦值器將其變量推向外間嘁锯,而是曝露抽象接口宪祥,以便用戶無需了解數(shù)據(jù)的實(shí)現(xiàn)就能操...
注釋的恰當(dāng)用法是彌補(bǔ)我們?cè)谟么a表達(dá)意圖時(shí)遭遇的失敗聂薪。即當(dāng)總無法找到不用注釋就能表達(dá)自我的方法時(shí)去使用注釋。因此蝗羊,盡量使用代碼(命名)來表達(dá)意圖而不是注釋藏澳。如果要使用注釋,注...
短小 函數(shù)應(yīng)該盡量短小耀找,20行封頂最佳翔悠。對(duì)于if語(yǔ)句、else語(yǔ)句野芒、while語(yǔ)句等蓄愁,其中的代碼塊應(yīng)該只有一行。該行大抵應(yīng)該是一個(gè)函數(shù)調(diào)用語(yǔ)句狞悲。這樣不但能保持函數(shù)短小撮抓,而且,...
命名包括給變量效诅、函數(shù)胀滚、參數(shù)趟济、類和封包命名乱投。以下是要遵守的幾條命名規(guī)則: 1、名副其實(shí) 變量顷编、函數(shù)或類的名稱應(yīng)該已經(jīng)答復(fù)了所有的大問題戚炫。它該告訴你,它為什么會(huì)存在媳纬,它做什么事双肤,...
在Java中,內(nèi)部類一般來說包括這四種:成員內(nèi)部類钮惠、局部?jī)?nèi)部類茅糜、匿名內(nèi)部類和靜態(tài)內(nèi)部類。 1素挽、成員內(nèi)部類 成員內(nèi)部類是依附于外部類的蔑赘,它可以無條件訪問外部類的所有成員屬性和成...
模板方法模式:定義一個(gè)操作中算法的框架,而將一些步驟延遲到子類中预明。 模板方法模式是一種基于繼承的代碼復(fù)用技術(shù)缩赛,通過使用模板方法模式,可以將一些復(fù)雜流程的實(shí)現(xiàn)步驟封裝在一系列基...
狀態(tài)模式用于解決對(duì)象的狀態(tài)轉(zhuǎn)換以及不同狀態(tài)下不同行為的封裝問題撰糠。當(dāng)系統(tǒng)中某個(gè)對(duì)象存在多個(gè)狀態(tài)酥馍,這些狀態(tài)之間可以進(jìn)行轉(zhuǎn)換,而且對(duì)象在不同狀態(tài)下行為不相同(解釋:對(duì)象的一些方法根...
觀察者模式用于建立一種對(duì)象與對(duì)象之間的依賴關(guān)系阅酪,一個(gè)對(duì)象發(fā)生改變時(shí)將自動(dòng)通知其他對(duì)象旨袒,其他對(duì)象將相應(yīng)作出反應(yīng)汁针。在觀察者模式中,發(fā)生改變的對(duì)象稱為觀察目標(biāo)峦失,而被通知的對(duì)象稱為觀...
開發(fā)過程中扇丛,有時(shí)實(shí)現(xiàn)的某一個(gè)功能在不同條件下有不同的處理邏輯,需要運(yùn)用不同的算法尉辑,此時(shí)可以使用策略模式帆精。 在策略模式中,我們可以定義一些獨(dú)立的類來封裝不同的算法隧魄,每一個(gè)類封裝...
備忘錄模式提供了一種狀態(tài)恢復(fù)的實(shí)現(xiàn)機(jī)制卓练,使得用戶可以方便地回到一個(gè)特定的歷史步驟,當(dāng)新的狀態(tài)無效或者存在問題時(shí)购啄,可以使用暫時(shí)存儲(chǔ)起來的備忘錄將狀態(tài)復(fù)原襟企,當(dāng)前很多軟件都提供了撤...
如果在一個(gè)系統(tǒng)中對(duì)象之間的聯(lián)系呈現(xiàn)為網(wǎng)狀結(jié)構(gòu),對(duì)象之間存在大量的多對(duì)多聯(lián)系狮含,將導(dǎo)致系統(tǒng)非常復(fù)雜顽悼,這些對(duì)象既會(huì)影響別的對(duì)象,也會(huì)被別的對(duì)象所影響几迄,這些對(duì)象稱為同事對(duì)象蔚龙,它們之間...
在軟件開發(fā)中,我們經(jīng)常需要使用聚合對(duì)象(集合)來存儲(chǔ)一系列數(shù)據(jù)映胁。聚合對(duì)象擁有兩個(gè)職責(zé):一是存儲(chǔ)數(shù)據(jù)木羹;二是遍歷數(shù)據(jù)。從依賴性來看解孙,前者是聚合對(duì)象的基本職責(zé)坑填;而后者既是可變化的,...
命令模式可以將請(qǐng)求發(fā)送者和接收者完全解耦弛姜,發(fā)送者與接收者之間沒有直接引用關(guān)系脐瑰,發(fā)送請(qǐng)求的對(duì)象只需要知道如何發(fā)送請(qǐng)求,而不必知道如何完成請(qǐng)求廷臼。命令模式的核心在于引入了命令類苍在,通...
很多情況下,在一個(gè)軟件系統(tǒng)中可以處理某個(gè)請(qǐng)求的對(duì)象不止一個(gè)中剩,他們可以構(gòu)成一條鏈?zhǔn)浇Y(jié)構(gòu)忌穿,這條鏈就稱為職責(zé)鏈。職責(zé)鏈可以是一條直線(最常見)结啼、一個(gè)環(huán)或者一個(gè)樹形結(jié)構(gòu)掠剑,鏈上的每一個(gè)...
外觀模式通過引入一個(gè)外觀角色來簡(jiǎn)化客戶端與子系統(tǒng)之間的交互,為復(fù)雜的子系統(tǒng)調(diào)用提供一個(gè)統(tǒng)一的入口郊愧,降低子系統(tǒng)與客戶端的耦合度朴译,且客戶端調(diào)用非常方便井佑。 外觀類(Facade)負(fù)...
在軟件開發(fā)中,由于某些原因眠寿,客戶端不想或不能直接訪問一個(gè)對(duì)象躬翁,此時(shí)可以通過一個(gè)稱之為“代理”的第三者來實(shí)現(xiàn)間接訪問,該方案對(duì)應(yīng)的設(shè)計(jì)模式被稱為代理模式盯拱。常見的代理形式包括遠(yuǎn)程...
裝飾模式是一種用于替代繼承的技術(shù)盒发,它通過一種無須定義子類的方式來給對(duì)象動(dòng)態(tài)增加職責(zé),使用對(duì)象之間的關(guān)聯(lián)關(guān)系取代類之間的繼承關(guān)系狡逢。在裝飾模式中引入了裝飾類宁舰,在裝飾類中既可以調(diào)用...
組合模式:組合多個(gè)對(duì)象形成樹形結(jié)構(gòu)以表示具有“整體—部分”關(guān)系的層次結(jié)構(gòu)。組合模式對(duì)單個(gè)對(duì)象(即葉子對(duì)象)和組合對(duì)象(即容器對(duì)象)的使用具有一致性奢浑。 注:由于葉子構(gòu)件不能包含...