首頁 培訓(xùn)網(wǎng) 最新資訊 熱門問答

JAVA

13727629617 免費(fèi)試聽 在線客服

您的位置: 北京培訓(xùn)網(wǎng) > JAVA培訓(xùn)資訊 > 千鋒java培訓(xùn)分享:面向?qū)ο蟮?0個設(shè)計原則

千鋒java培訓(xùn)分享:面向?qū)ο蟮?0個設(shè)計原則

來源:教育聯(lián)展網(wǎng) | 發(fā)布時間: | 編輯:佚名

自1995年5月正式推出的18年以來,Java已從編程語言發(fā)展成為全球**大通用開發(fā)平臺。Java技術(shù)已為計算機(jī)行業(yè)主要公司所采納,同時也被越來越多的國際技術(shù)標(biāo)準(zhǔn)化組織所接受。今天,Java運(yùn)行在7.08億手機(jī)、10億智能卡和7億PC機(jī)上,并為28款可兼容的應(yīng)用服務(wù)器提供了功能強(qiáng)大的平臺。這么多應(yīng)用,徹底改變了用戶的生活。越來越多的企業(yè),因?yàn)槭褂昧薐ava而提高了生產(chǎn)效率。在中國,越來越多的用戶,因?yàn)镴ava而降低了成本,享受了生活。那么在Java的開發(fā)設(shè)計過程中要遵循哪些原則那?

千鋒java培訓(xùn)分享:面向?qū)ο蟮?/span>10個設(shè)計原則

面向?qū)ο笤O(shè)計原則是OOPS編程的核心, 但我見過的大多數(shù)Java程序員熱心于像Singleton (單例) 、Decorator(裝飾器)、Observer(觀察者) 等設(shè)計模式,而沒有把足夠多的注意力放在學(xué)習(xí)面向?qū)ο蟮姆治龊驮O(shè)計上面。

學(xué)習(xí)面向?qū)ο缶幊滔?/span>“抽象”、“封裝”、“多態(tài)”、“繼承”等基礎(chǔ)知識是重要的,但同時為了創(chuàng)建簡潔、模塊化的設(shè)計,了解這些設(shè)計原則也同等重要。

我經(jīng)常看到不同經(jīng)驗(yàn)水平的java程序員,他們有的不知道這些OOPS 和SOLID設(shè)計原則,有的只是不知道一個特定的設(shè)計原則會帶來怎樣的益處,甚至不知道在編碼中如何使用這些設(shè)計原則。

(設(shè)計原則)底線是永遠(yuǎn)追求高內(nèi)聚、低耦合的編碼或設(shè)計。 Apache 和 Sun的開源代碼是學(xué)習(xí)Java和OOPS設(shè)計原則的良好范例。它們向我們展示了,設(shè)計原則在Java編程中是如何使用的。

下面千鋒小編介紹一些面向?qū)ο蟮脑O(shè)計原則,幫助更多的小伙伴玩轉(zhuǎn)java!

DRY – Don’t repeat yourself

我們**個面向?qū)ο笤O(shè)計原則是:DRY ,從名稱可以看出DRY(don’t repeat yourself)意思是不寫重復(fù)代碼,而是抽象成可復(fù)用的代碼塊。如果您有兩處以上相同的代碼塊,請考慮把它們抽象成一個單獨(dú)的方法;或者您多次使用了硬編碼的值,請把它們設(shè)置成公共常量。

這種面向?qū)ο笤O(shè)計原則的優(yōu)點(diǎn)是易于維護(hù)。重要的是不要濫用此原則,重復(fù)不是針對代碼而是針對功能來說。它的意思是,如果您使用通用代碼來驗(yàn)證OrderID和SSN,這并不意味著它們是相同的或者他們今后將保持不變。

**把通用代碼用于實(shí)現(xiàn)兩種不同的功能,或者您把這兩種不同的功能密切地聯(lián)系在一起;當(dāng)您的OrderID格式改變時,您的SSN驗(yàn)證代碼將會中斷。要當(dāng)心這種耦合,而且不要把彼此之間沒有任何關(guān)系卻類似的代碼組合在一起。

封裝經(jīng)常修改的代碼(Encapsulate What Changes

在軟件領(lǐng)域永遠(yuǎn)不變的是“變化”,所以把您認(rèn)為或懷疑將來要被修改的代碼封裝起來。這種面向?qū)ο笤O(shè)計模式的優(yōu)點(diǎn)是:易于測試和維護(hù)恰當(dāng)封裝的代碼。

如果您在用Java編程,那么請遵守以下原則:變量和方法的訪問權(quán)限默認(rèn)設(shè)置為私有,并且逐步放開它們的訪問權(quán)限,例如從“private”到“protected ”、“not public”。

Java中的一些設(shè)計模式使用了封裝,工廠設(shè)計模式就是一個例子,它封裝了創(chuàng)建對象的代碼而且提供了以下靈活性:后續(xù)生成新對象不影響現(xiàn)有的代碼。

打開/關(guān)閉設(shè)計原則(OpenClosed Design Principle

類、方法/函數(shù)應(yīng)當(dāng)是對擴(kuò)展(新功能)開放,對修改閉合。這是另外一個優(yōu)雅的SOLID 設(shè)計原則,以防止有人修改**測試的代碼。理想情況下假如您添加了新功能,那么您的代碼要經(jīng)過測試,這就是打開/關(guān)閉設(shè)計原則的目標(biāo)。順便說一句,SOLID中的字母“O”指的是打開/關(guān)閉設(shè)計原則。

單一職責(zé)原則(Single Responsibility Principle(SRP)

單一職責(zé)原則是另外一個SOLID設(shè)計原則,SOLID中的字母“S”指的就是它。按照SRP,一個類修改的原因應(yīng)當(dāng)有且只有一個,或者一個類應(yīng)當(dāng)總是實(shí)現(xiàn)單一功能。

如果您在Java中的一個類實(shí)現(xiàn)了多個功能,那么這些功能之間便產(chǎn)生了耦合關(guān)系;如果您修改其中的一個功能,您有可能就打破了這種耦合關(guān)系,那么就要進(jìn)行另一輪測試以避免產(chǎn)生新的問題。

依賴注入/反轉(zhuǎn)原則(Dependency Injection or Inversion principle

不要問框架的依賴注入功能將會給你帶來什么益處,依賴注入功能在spring框架里已經(jīng)很好的得到了實(shí)現(xiàn),這一設(shè)計原則的優(yōu)雅之處在于:DI框架注入的任何一個類都易于用模擬對象進(jìn)行測試,并且更易于維護(hù),因?yàn)閯?chuàng)建對象的代碼在框架里是集中的而且和客戶端代碼是隔離的。

有多種方法可以實(shí)現(xiàn)依賴注入,例如使用字節(jié)碼工具,其中一些AOP(面向切面編程)框架如切入點(diǎn)表達(dá)式或者spring里使用的代理。想對這種SOLID設(shè)計原則了解更多,請看IOC 和 DI設(shè)計模式中的例子。 SOLID中的字母“D”指的就是這種設(shè)計原則。

優(yōu)先使用組合而非繼承(Favor Composition over Inheritance

如果可以的話,要優(yōu)先使用組合而非繼承。你們中的一些人可能為此爭論,但我發(fā)現(xiàn)組合比繼承更有靈活性。組合允許在運(yùn)行時**設(shè)置屬性修改一個類的行為,**使用多態(tài)即以接口的形式實(shí)現(xiàn)類之間的組合關(guān)系,并且為修改組合關(guān)系提供了靈活性。甚至 Effective Java也建議優(yōu)先使用組合而非繼承。

里氏替換原則(Liskov Substitution Principle LSP

根據(jù)里氏替換原則,父類出現(xiàn)的地方可以用子類來替換,例如父類的方法或函數(shù)被子類對象替換應(yīng)該沒有任何問題。LSP和單一職責(zé)原則、接口隔離原則密切相關(guān)。如果一個父類的功能比其子類還要多,那么它可能不支持這一功能,而且也違反了LSP設(shè)計原則。

為了遵循 LSP SOLID設(shè)計原則,派生類或子類(相對父類比較)必須增強(qiáng)功能,而非減少。SOLID中的字母“L”指的就是 LSP設(shè)計原則。


接口隔離原則

接口隔離原則指,如果不需要一個接口的功能,那么就不要實(shí)現(xiàn)此接口。這大多在以下情況發(fā)生:一個接口包含多種功能,而實(shí)現(xiàn)類只需要其中一種功能。接口設(shè)計是一種棘手的工作,因?yàn)橐坏┌l(fā)布了接口,您就不能修改它否則會影響實(shí)現(xiàn)該接口的類。

Java中這種設(shè)計原則的另一個好處是:接口有個特點(diǎn),任何類使用它之前都要實(shí)現(xiàn)該接口所有的方法,使用功能單一的接口意味著實(shí)現(xiàn)更少的方法。

編程以接口(而非實(shí)現(xiàn)對象)為中心

編程總是以接口(而非實(shí)現(xiàn)對象)為中心,這會使代碼的結(jié)構(gòu)靈活,而且任何一個新的接口實(shí)現(xiàn)對象都能兼容現(xiàn)有代碼結(jié)構(gòu)。所以在Java中,變量、方法返回值、方法參數(shù)的數(shù)據(jù)類型請使用接口。這是許多Java程序員的建議, Effective Java 以及 head first design pattern 等書也這樣建議。

代理原則

不要期望一個類完成所有的功能,可以適當(dāng)?shù)匕岩恍┕δ芙唤o代理類實(shí)現(xiàn)。代理原則的典范是:Java 中的equals() 和 hashCode() 方法。為了比較兩個對象的內(nèi)容是否相同,我們讓用于比較的類本身完成對比工作而非它們的調(diào)用方。這種設(shè)計原則的好處是:沒有重復(fù)編碼而且很容易修改類的行為。

總結(jié)

以上所有面向?qū)ο蟮脑O(shè)計原則可以幫助您寫出靈活、優(yōu)雅的代碼:具有高內(nèi)聚低耦合的代碼結(jié)構(gòu)。理論只是**步,更重要的是我們要習(xí)得一種能力去發(fā)現(xiàn)什么時候使用這些設(shè)計原則。

去發(fā)現(xiàn)我們是否違反了什么設(shè)計原則和影響了代碼的靈活性,但是世界上沒有什么是完美的,我們解決問題時不能總?cè)ナ褂迷O(shè)計模式和設(shè)計原則,它們大多用于有較長維護(hù)周期的大型企業(yè)項(xiàng)目。

    千鋒java培訓(xùn),專業(yè)的象征,是您學(xué)習(xí)java的不二之選!

 

以上就是“Java設(shè)計要遵循哪些原則?”的信息介紹,如果還想要了解更多有關(guān)Java培訓(xùn)的其他機(jī)構(gòu)或者其他課程的話,可以登錄我們的網(wǎng)站進(jìn)行瀏覽查詢:教育聯(lián)展網(wǎng)以及 中華網(wǎng)考試 ?;蛘邠艽蛭覀兊淖稍儫峋€。

電話:010-64707530
QQ:2645567689

微信:15110074071
 

熱門機(jī)構(gòu)推薦
JAVA

免費(fèi)體驗(yàn)課開班倒計時

11: 41: 09

稍后會有專業(yè)老師給您回電,請保持電話暢通

咨詢電話:13727629617

本周熱門資訊

全國分站 熱門機(jī)構(gòu)

北京JAVA培訓(xùn) 上海JAVA培訓(xùn) 廣州JAVA培訓(xùn) 深圳JAVA培訓(xùn) 杭州JAVA培訓(xùn) 蘇州JAVA培訓(xùn) 南京JAVA培訓(xùn) 天津JAVA培訓(xùn) 佛山JAVA培訓(xùn) 南寧JAVA培訓(xùn) 長沙JAVA培訓(xùn) 重慶JAVA培訓(xùn) 太原JAVA培訓(xùn) 青島JAVA培訓(xùn) 寧波JAVA培訓(xùn) 鄭州JAVA培訓(xùn) 西安JAVA培訓(xùn) 廈門JAVA培訓(xùn) 武漢JAVA培訓(xùn) 成都JAVA培訓(xùn) 無錫JAVA培訓(xùn) 濟(jì)南JAVA培訓(xùn) 昆明JAVA培訓(xùn) 貴陽JAVA培訓(xùn) 揚(yáng)州JAVA培訓(xùn) 徐州JAVA培訓(xùn) 珠海JAVA培訓(xùn) 合肥JAVA培訓(xùn) 長春JAVA培訓(xùn)

深圳博為峰教育深圳中公優(yōu)就業(yè)南京博為峰教育南京和盈教育

申請試聽名額

已有10254人申請免費(fèi)試聽

01電話咨詢 | 13727629617

QQ:
加盟合作:0755-83654572

今日已有25人申請,本月限額500