在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

六大關(guān)于JAVA優(yōu)化原則你了解過嗎?

Dbwd_Imgtec ? 來源:電子發(fā)燒友網(wǎng) ? 作者:工程師譚軍 ? 2018-07-05 16:37 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1、單一職責(zé)

代碼優(yōu)化第一步,單一職責(zé)原則 (Single Responsibility Principle)。對(duì)于一個(gè)Java類,應(yīng)該僅有一個(gè)引起它變化的原因,也就是說,一個(gè)類中,應(yīng)該是一組相關(guān)性很高的函數(shù)、數(shù)據(jù)的封裝。但是這個(gè)原則的界限劃分的并不是那么清晰,很大程度上要依賴于開發(fā)者的個(gè)人經(jīng)驗(yàn)來定。對(duì)于單一職責(zé)界限的劃分最大的問題就是類的職責(zé)是什么,如何劃分類的職責(zé)。

單一職責(zé)原則在我們實(shí)際工作中隨處可見,例如在我們比較關(guān)心的框架MVC,MVP中,負(fù)責(zé)頁面展示的Activity,F(xiàn)ragment,以及各種View,它們只負(fù)責(zé)UI的展示,具體的業(yè)務(wù)邏輯則交付給Controller或者Presenter.。再例如各種流行的圖片加載框架,在其中都可以找到專門負(fù)責(zé)圖片加載類,圖片緩存的類。所以,單一職責(zé)原則是我們代碼優(yōu)化的第一步,也是最重要的一步。

2、開閉原則

開閉原則(Open Close Principle),是Java世界里最基礎(chǔ)的設(shè)計(jì)原則,它指導(dǎo)我們?nèi)绾谓⒁粋€(gè)穩(wěn)定、靈活的系統(tǒng)。開閉原則定義:軟件中的對(duì)象(類,模塊、函數(shù)等)應(yīng)該對(duì)于擴(kuò)展是開放的,對(duì)于修改的封閉的。在軟件的生命周期內(nèi),因?yàn)樽兓⑸?jí)、維護(hù)等原因需要對(duì)軟件原有的代碼進(jìn)行修改時(shí),可能會(huì)將錯(cuò)誤引入原本已經(jīng)測(cè)試過的舊代碼,破壞原有系統(tǒng),因此,當(dāng)軟件需要變化時(shí),我們應(yīng)該進(jìn)肯能通過擴(kuò)展的方式來實(shí)現(xiàn)變化,而不是通過修改已有的代碼來實(shí)現(xiàn)。但這也不是絕對(duì)的,在實(shí)際開發(fā)過程中,只通過繼承的方式來升級(jí)、維護(hù)原有系統(tǒng)是一個(gè)理想化的情況,因此,實(shí)際開發(fā)中,修改原有代碼、擴(kuò)展代碼往往是同時(shí)存在的。而如何確保原有軟件模塊的正確性,以及盡量少地影響原有代碼模塊,答案就是盡量遵守開閉原則。

3、里氏替換原則

里氏替換原則(Liskov Substitution Principle),定義:如果對(duì)于每一個(gè)類型為ClassA的對(duì)象a,都有類型為ClassB的對(duì)象b,使得以ClassB定義的所有程序P在所有的對(duì)象b都替換成a時(shí),程序P的行為沒有發(fā)生變化,那么類型ClassA是類型ClassB的子類型。然而這段敘述并無卵用,更直接的定義是:所有引用基類的地方必須能透明的使用其子類的對(duì)象。

我們知道,面向?qū)ο蟮娜筇攸c(diǎn)是:繼承,封裝,多態(tài),里氏替換原則就是依賴于繼承、多態(tài)這兩大特性。里氏替換原則簡(jiǎn)單來說就是,所有引用基類的地方,必須能使用子類對(duì)象。也就是說只要父類能出現(xiàn)的地方,其子類就可以出現(xiàn)。而且替換為子類不會(huì)產(chǎn)生任何錯(cuò)誤和差異。使用者可能根部就不需要知道是父類還是子類,但是反過來就行不了,有子類出現(xiàn)的地方父類未必就能適應(yīng)。其實(shí)歸根結(jié)底,里氏替換原則就是基于這兩個(gè)字:抽象

例如在Android中,頁面Window的展示依賴于View,而View定義了一個(gè)視圖抽象,measure以及draw是其子類共享的方法,子類通過復(fù)寫measure以及draw方法,可實(shí)現(xiàn)各式各樣功能以及視圖的view,任何繼承自View的子類都可以傳遞給Window,由Window負(fù)責(zé)組織View,并將View顯示到屏幕上,這就是所說的里氏替換原則。

里氏替換原則的核心原理是抽象,抽象又依賴于繼承,在OOP當(dāng)中,繼承的優(yōu)缺點(diǎn)都相當(dāng)明顯。

繼承的優(yōu)點(diǎn):

代碼重用,減少創(chuàng)建類的成本,每個(gè)子類都擁有父類的方法和屬性

子類和父類基本相似,但又與父類有所區(qū)別

提高代碼的可擴(kuò)展性

繼承的缺點(diǎn):

繼承是入侵性的,只要繼承就必須擁有父類的所有屬性和方法

可能造成子類代碼冗余,靈活性降低,因?yàn)樽宇惐仨殦碛懈割惖姆椒ê蛯傩?/p>

但事物總有兩面性,符合權(quán)衡和利用都是需要根據(jù)具體情況來做出選擇。在開發(fā)過程中運(yùn)用抽象是走向代碼優(yōu)化的重要一步。

4、依賴倒置原則

依賴倒置原則(Dependence Inversion Principle),依賴倒置原則指定了一種特定的解耦形式,使得高層次的模塊不依賴于低層次的模塊的實(shí)現(xiàn)細(xì)節(jié)的目的,依賴模塊被顛倒了。然而定義往往的不好理解的,依賴倒置原則有以下幾個(gè)關(guān)鍵點(diǎn):

高層模塊不應(yīng)該依賴低層模塊,兩者都應(yīng)該依賴其抽象

抽象不應(yīng)該依賴細(xì)節(jié)

細(xì)節(jié)應(yīng)該依賴抽象

在Java 語言中,抽象就是指接口或抽象類,兩者都是不能直接被實(shí)例化的。細(xì)節(jié)就是實(shí)現(xiàn)類,實(shí)現(xiàn)接口或繼承抽象類而產(chǎn)生的類就是細(xì)節(jié),其特點(diǎn)是,可以直接被實(shí)例化。高層模塊就是調(diào)用端,低層模塊就是具體實(shí)現(xiàn)類。依賴倒置原則在Java語言中的表現(xiàn)就是:模塊間的依賴通過抽象發(fā)生,實(shí)現(xiàn)類之間不發(fā)生直接的依賴關(guān)系,其依賴關(guān)系是通過接口或?qū)崿F(xiàn)類產(chǎn)生的。其實(shí)一句話就是:面向接口,或者面向抽象編程。 如果類于類直接依賴于細(xì)節(jié),那么它們之間就有直接耦合,當(dāng)具體實(shí)現(xiàn)需要變化時(shí),意味著要同時(shí)修改依賴者的代碼,這限制了系統(tǒng)的可擴(kuò)展性。

5、接口隔離原則

接口隔離原則(Interface Segregation Principle),它的定義是:客戶端不應(yīng)該依賴它不需要的接口。另一種定義是:類間的依賴關(guān)系應(yīng)該建立在最小的接口上。接口隔離原則將非常龐大,臃腫的接口拆分成更小的接口和更具體的接口,這樣客戶只需要知道他們感興趣的方法。接口隔離原則的目的是系統(tǒng)解開耦合,從而容易重構(gòu)、更改和重新部署。

定義總是不好理解的,我們通過一段代碼來理解一下接口隔離原則的具體使用。比如我們常見的輸出流OutputStream,使用之后需要將其關(guān)閉:

我們看到,這段代碼的可讀性非常差,各種try catch嵌套的都是極其簡(jiǎn)單的代碼,那么我們?nèi)绾谓鉀Q這個(gè)問題呢?在Java中有一個(gè)Closeable接口:

該接口標(biāo)識(shí)了一個(gè)可關(guān)閉的對(duì)象,它只有一個(gè)close方法,而我們的FileOutputStream也實(shí)現(xiàn)了這個(gè)接口。這樣我們就好辦了,我們可以依賴Closeable 接口實(shí)現(xiàn)一個(gè)工具類:

在實(shí)際的運(yùn)用中,我們只需要這樣:

代碼簡(jiǎn)潔了很多,而且這個(gè)工具類可以運(yùn)用到各類可關(guān)閉的對(duì)象中,保證了代碼的重用性。CloseUtils的closeQuietly方法的基本原理就是依賴于CLoseable抽象而不是具體實(shí)現(xiàn),并且建立在最小化依賴原則的基礎(chǔ)上,它只需要知道這個(gè)對(duì)象是可關(guān)閉的,其他的一概不關(guān)心,也就是我們所提出的接口隔離原則。

6、迪米特原則

迪米特原則(Law of Demeter),也成為最少知識(shí)原則:一個(gè)對(duì)象應(yīng)該對(duì)其他對(duì)象有最少的了解。也就是說,一個(gè)類應(yīng)該對(duì)自己需要耦合或者調(diào)用的類知道的最少,類的內(nèi)部如何實(shí)現(xiàn)與調(diào)用者或者依賴者沒關(guān)系,調(diào)用者和依賴者只需要知道它需要的方法即可,其他的一概不管。類與類的關(guān)系越密切,耦合度越大,當(dāng)一個(gè)類發(fā)生改變時(shí),對(duì)另一個(gè)類的影響也越大。

就比如說MVP框架中的Model層的實(shí)現(xiàn),我們都知道Model抽象是給View提供具體的數(shù)據(jù),而我們的View層并不需要知道數(shù)據(jù)是怎么得來的,就算我們后臺(tái)接口如何改變,只要數(shù)據(jù)結(jié)構(gòu)不變,那我們就不需要通知View層進(jìn)行改變。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • JAVA
    +關(guān)注

    關(guān)注

    20

    文章

    2988

    瀏覽量

    108837
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4895

    瀏覽量

    70546

原文標(biāo)題:Java代碼優(yōu)化六大原則

文章出處:【微信號(hào):Imgtec,微信公眾號(hào):Imagination Tech】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    六大汽車安全技術(shù)全解析

    六大汽車安全技術(shù)全解析
    發(fā)表于 08-20 13:15

    六大PCB布線經(jīng)驗(yàn)

    六大PCB布線經(jīng)驗(yàn)
    發(fā)表于 09-21 15:51

    六大PCB布線經(jīng)驗(yàn)

    六大PCB布線經(jīng)驗(yàn)
    發(fā)表于 12-26 16:55

    Java語言學(xué)習(xí)的六大關(guān)

    Java語言學(xué)習(xí)六大關(guān)
    發(fā)表于 01-01 07:59

    VoLTE端到端部署10大關(guān)鍵問題了解

    VoLTE端到端部署10大關(guān)鍵問題了解
    發(fā)表于 05-21 06:18

    PCB六大生產(chǎn)工藝了解嗎?

    印制電路技術(shù)研討會(huì),會(huì)上,列出了26種不同的制造方法,并歸結(jié)為如下六大類:01涂料法把金屬粉末和膠黏劑混合,制成導(dǎo)電涂料,用通常的印刷方法將導(dǎo)電圖形涂在基板上(注:基板,指PCB板的絕緣介質(zhì)層;現(xiàn)在
    發(fā)表于 11-11 13:52

    DDR內(nèi)存條治具了解多少?

    ★ DDR內(nèi)存條治具六大特點(diǎn) 有哪些呢? 讓凱智通小編為解答~ ①通用性高:只需換顆粒限位框,即可測(cè)試尺寸不同的顆粒; ②操作省力方便:采用手動(dòng)翻蓋滾軸式結(jié)構(gòu),相比同類產(chǎn)品減少磨損,達(dá)到更高的機(jī)械
    發(fā)表于 06-15 15:45

    賽靈思:六大領(lǐng)域優(yōu)化開發(fā)套件齊發(fā),大幅提升SoC設(shè)計(jì)效率與創(chuàng)

    賽靈思:六大領(lǐng)域優(yōu)化開發(fā)套件齊發(fā),大幅提升SoC設(shè)計(jì)效率與創(chuàng)新 賽靈思 (Xilinx, Inc.)日前宣布,作為公司目標(biāo)設(shè)計(jì)平臺(tái)最新一步的發(fā)展,賽靈思同時(shí)推出六大領(lǐng)域優(yōu)化
    發(fā)表于 12-10 09:02 ?677次閱讀

    JAVA設(shè)計(jì)模式六大原則

    單一職責(zé)原則:不要存在多于一個(gè)導(dǎo)致類變更的原因。通俗的說,即一個(gè)類只負(fù)責(zé)一項(xiàng)職責(zé)。 問題由來:類T負(fù)責(zé)兩個(gè)不同的職責(zé):職責(zé)P1,職責(zé)P2。當(dāng)由于職責(zé)P1需求發(fā)生改變而需要修改類T時(shí),有可能會(huì)導(dǎo)致原本運(yùn)行正常的職責(zé)P2功能發(fā)生故障。
    發(fā)表于 11-27 11:23 ?9064次閱讀
    <b class='flag-5'>JAVA</b>設(shè)計(jì)模式<b class='flag-5'>六大原則</b>

    一文匯總PCB電路設(shè)計(jì)的六大原則

    ,可能會(huì)出現(xiàn)一些問題,甚至很可能帶來嚴(yán)重的電路性能問題。本文主要介紹的是PCB電路設(shè)計(jì)的六大原則,具體的跟隨小編來了解一下。
    發(fā)表于 05-04 15:50 ?6625次閱讀
    一文匯總PCB電路設(shè)計(jì)的<b class='flag-5'>六大原則</b>

    接口設(shè)計(jì)設(shè)計(jì)模式的六大原則了解嗎?

    一. 單一職責(zé)原則Single Responsibility Principle, 簡(jiǎn)稱SRP。定義TherThere should never be more than one reason for a class to change應(yīng)該有且僅有一個(gè)原因引起類的變
    的頭像 發(fā)表于 06-10 09:25 ?1.1w次閱讀
    接口設(shè)計(jì)設(shè)計(jì)模式的<b class='flag-5'>六大原則</b><b class='flag-5'>你</b><b class='flag-5'>了解</b>嗎?

    2020年云計(jì)算發(fā)展六大關(guān)鍵詞,以及六大關(guān)鍵詞背后的重要趨勢(shì)

    中國信通院云計(jì)算與大數(shù)據(jù)研究所副所長(zhǎng)栗蔚在會(huì)上正式發(fā)布并解讀白皮書,披露了中國信通院基于對(duì)云計(jì)算市場(chǎng)的長(zhǎng)期觀察和研究,總結(jié)出的2020年云計(jì)算發(fā)展六大關(guān)鍵詞,以及六大關(guān)鍵詞背后的重要趨勢(shì)。
    的頭像 發(fā)表于 08-24 11:02 ?1w次閱讀
    2020年云計(jì)算發(fā)展<b class='flag-5'>六大關(guān)</b>鍵詞,以及<b class='flag-5'>六大關(guān)</b>鍵詞背后的重要趨勢(shì)

    變頻器控制回路布線的六大禁忌

    變頻器輔助控制方式雖然有諸多優(yōu)點(diǎn),但如果控制回路布線不合理往往會(huì)給變頻器的正常運(yùn)行帶來不利影響,甚至引發(fā)不必要的故障。今天小編就結(jié)合經(jīng)驗(yàn),歸納總結(jié)了六大關(guān)于變頻器控制回路布線的禁忌:
    發(fā)表于 09-22 16:27 ?1383次閱讀

    工業(yè)傳感器選型的六大基本原則

    工業(yè)傳感器選型的六大基本原則
    的頭像 發(fā)表于 01-06 09:17 ?1473次閱讀

    配電室常見六大安全隱患,疏忽了幾個(gè)?

    配電室常見六大安全隱患,疏忽了幾個(gè)?
    的頭像 發(fā)表于 03-01 09:13 ?2601次閱讀
    配電室常見<b class='flag-5'>六大</b>安全隱患,<b class='flag-5'>你</b>疏忽了幾個(gè)?
    主站蜘蛛池模板: 久久香蕉国产线看观看亚洲片 | www 在线播放 | 在线精品国产三级 | 18毛片 | 欧美.亚洲.日本一区二区三区 | 欧洲色| 哪里可以看免费毛片 | 波多野结衣在线视频观看 | 午夜影院在线视频 | 成人影院免费观看 | 亚洲一区二区三区免费视频 | 起碰成人免费公开网视频 | 国产婷婷色一区二区三区 | 欧美日韩一级视频 | 国产精品9999久久久久仙踪林 | 欧美.成人.综合在线 | 亚洲一区三区 | bt天堂资源 | 深夜网站免费 | 欧美成人精品福利网站 | 黄色特级录像 | 久久国产精品99久久久久久老狼 | 天天操人人干 | 国产精品久久久久久久久福利 | 噜噜噜噜噜噜色 | 久久国产精品99精品国产987 | 久久五月女厕所一区二区 | 日b毛片 | 扒开末成年粉嫩的流白浆视频 | 免费播放一区二区三区 | 爱爱网站免费 | aaaaaa级特色特黄的毛片 | 欧美中字 | 天天干人人干 | 日本美女黄网站 | 看视频免费网站 | 日韩欧美亚洲综合一区二区 | 亚洲资源最新版在线观看 | 中国一级特黄高清免费的大片 | 国产经典三级 | 天天添|