日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Java程序員應當知道的10個面向對象設計原則

瀏覽:162日期:2022-09-05 14:29:18

面向對象設計原則是OOPS編程的核心, 但我見過的大多數Java程序員熱心于像Singleton (單例) 、 Decorator(裝飾器)、Observer(觀察者) 等設計模式,而沒有把足夠多的注意力放在學習面向對象的分析和設計上面。學習面向對象編程像“抽象”、“封裝”、“多態”、“繼承” 等基礎知識是重要的,但同時為了創建簡潔、模塊化的設計,了解這些設計原則也同等重要。我經??吹讲煌涷炈降膉ava程序員,他們有的不知道這些OOPS 和SOLID設計原則,有的只是不知道一個特定的設計原則會帶來怎樣的益處,甚至不知道在編碼中如何使用這些設計原則。

(設計原則)底線是永遠追求高內聚、低耦合的編碼或設計。 Apache 和 Sun的開源代碼是學習Java和OOPS設計原則的良好范例。它們向我們展示了,設計原則在Java編程中是如何使用的。Java JDK 使用了一些設計原則:BorderFactory類中的工廠模式、Runtime類中的單例模式、java.io 類中的裝飾器模式。順便說一句,如果您真的對Java編碼原則感興趣,請閱讀Joshua Bloch 的Effective Java,他編寫過Java API。我個人最喜歡的關于面向對象設計模式的是Kathy Sierra的Head First Design Pattern(深入淺出設計模式),以及其它的關于深入淺出面向對象分析和設計。這些書對編寫更好的代碼有很大幫助,充分利用各種面向對象和SOLID的設計模式。

雖然學習設計模式(原則)最好的方法是現實中的例子和理解違反設計原則帶來的不便,本文的宗旨是向那些沒有接觸過或正處于學習階段的Java程序員介紹面向對象設計原則。我個人認為OOPS 和SOLID設計原則需要有文章清楚的介紹它們,在此我一定盡力做到這點,但現在請您準備瀏覽以下設計模式(原則) :)

DRY – Don’t repeat yourself

我們第一個面向對象設計原則是:DRY ,從名稱可以看出DRY(don’t repeat yourself)意思是不寫重復代碼,而是抽象成可復用的代碼塊。如果您有兩處以上相同的代碼塊,請考慮把它們抽象成一個單獨的方法;或者您多次使用了硬編碼的值,請把它們設置成公共常量。這種面向對象設計原則的優點是易于維護。重要的是不要濫用此原則,重復不是針對代碼而是針對功能來說。它的意思是,如果您使用通用代碼來驗證OrderID和SSN,這并不意味著它們是相同的或者他們今后將保持不變。通過把通用代碼用于實現兩種不同的功能,或者您把這兩種不同的功能密切地聯系在一起;當您的OrderID格式改變時,您的SSN驗證代碼將會中斷。所以要當心這種耦合,而且不要把彼此之間沒有任何關系卻類似的代碼組合在一起。

封裝經常修改的代碼 Encapsulate What Changes

在軟件領域永遠不變的是“變化”,所以把您認為或懷疑將來要被修改的代碼封裝起來。這種面向對象設計模式的優點是:易于測試和維護恰當封裝的代碼。如果您在用Java編程,那么請遵守以下原則:變量和方法的訪問權限默認設置為私有,并且逐步放開它們的訪問權限,例如從“private”到“protected ”、“not public”。Java中的一些設計模式使用了封裝,工廠設計模式就是一個例子,它封裝了創建對象的代碼而且提供了以下靈活性:后續生成新對象不影響現有的代碼。

打開/關閉設計原則 OpenClosed Design Principle

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

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

單一職責原則是另外一個SOLID設計原則,SOLID中的字母“S”指的就是它。按照SRP,一個類修改的原因應當有且只有一個,或者一個類應當總是實現單一功能。如果您在Java中的一個類實現了多個功能,那么這些功能之間便產生了耦合關系;如果您修改其中的一個功能,您有可能就打破了這種耦合關系,那么就要進行另一輪測試以避免產生新的問題。

依賴注入/反轉原則 Dependency Injection or Inversion principle

不要問框架的依賴注入功能將會給你帶來什么益處,依賴注入功能在spring框架里已經很好的得到了實現,這一設計原則的優雅之處在于:DI框架注入的任何一個類都易于用模擬對象進行測試,并且更易于維護,因為創建對象的代碼在框架里是集中的而且和客戶端代碼是隔離的。有多種方法可以實現依賴注入,例如使用字節碼工具,其中一些AOP(面向切面編程)框架如切入點表達式或者spring里使用的代理。想對這種SOLID設計原則了解更多,請看IOC 和 DI設計模式中的例子。 SOLID中的字母“D”指的就是這種設計原則。

優先使用組合而非繼承 Favor Composition over Inheritance

如果可以的話,要優先使用組合而非繼承。你們中的一些人可能為此爭論,但我發現組合比繼承更有靈活性。組合允許在運行時通過設置屬性修改一個類的行為,通過使用多態即以接口的形式實現類之間的組合關系,并且為修改組合關系提供了靈活性。甚至 Effective Java也建議優先使用組合而非繼承。

里氏替換原則 Liskov Substitution Principle LSP

根據里氏替換原則,父類出現的地方可以用子類來替換,例如父類的方法或函數被子類對象替換應該沒有任何問題。LSP和單一職責原則、接口隔離原則密切相關。如果一個父類的功能比其子類還要多,那么它可能不支持這一功能,而且也違反了LSP設計原則。為了遵循 LSP SOLID設計原則,派生類或子類(相對父類比較)必須增強功能,而非減少。SOLID中的字母“L”指的就是 LSP設計原則。

接口隔離原則

接口隔離原則指,如果不需要一個接口的功能,那么就不要實現此接口。這大多在以下情況發生:一個接口包含多種功能,而實現類只需要其中一種功能。接口設計是一種棘手的工作,因為一旦發布了接口,您就不能修改它否則會影響實現該接口的類。在Java中這種設計原則的另一個好處是:接口有一個特點,任何類使用它之前都要實現該接口所有的方法,所以使用功能單一的接口意味著實現更少的方法。

編程以接口(而非實現對象)為中心

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

代理原則

不要期望一個類完成所有的功能,可以適當地把一些功能交給代理類實現。代理原則的典范是:Java 中的equals() 和 hashCode() 方法。為了比較兩個對象的內容是否相同,我們讓用于比較的類本身完成對比工作而非它們的調用方。這種設計原則的好處是:沒有重復編碼而且很容易修改類的行為。

總結

以上所有面向對象的設計原則可以幫助您寫出靈活、優雅的代碼:具有高內聚低耦合的代碼結構。理論只是第一步,更重要的是我們要習得一種能力去發現什么時候使用這些設計原則。去發現我們是否違反了什么設計原則和影響了代碼的靈活性,但是世界上沒有什么是完美的,我們解決問題時不能總去使用設計模式和設計原則,它們大多用于有較長維護周期的大型企業項目。

來自:http://blog.csdn.net/littlesmallless/article/details/70041678

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美日中文字幕| 亚洲精品高潮| 欧美成人基地 | 日韩a一区二区| 麻豆国产一区| 久久精品国产99国产精品| 欧美亚洲国产精品久久| 亚洲三级精品| 日本午夜精品视频在线观看| 久久国产精品免费一区二区三区| 亚洲aa在线| 亚州欧美在线| 精品一区二区三区中文字幕| 免费看欧美美女黄的网站| 久久久久伊人| 欧美午夜精品一区二区三区电影| 亚洲+小说+欧美+激情+另类| 精品资源在线| 综合日韩av| 国产美女精品| 欧美激情三区| 欧美一区三区| 久久99国产精品视频| 欧美日韩国产高清电影| 国产精品一区二区三区av| 亚洲三级精品| 欧美日韩一区二区三区不卡视频 | 欧美1区2区3区| 国产综合激情| 在线观看亚洲精品福利片| 久久精品99久久久| 蜜桃久久久久久久| 国产精品99久久精品| 国产精品第十页| 青青草国产精品亚洲专区无| 蜜桃av一区二区三区电影| 国产一区二区三区黄网站| 激情久久久久久| 国产盗摄——sm在线视频| 欧美理论视频| 日韩激情一区二区| 亚洲欧美日韩在线观看a三区| 亚洲一二三区视频| 久久电影tv| 欧美激情另类| 国产成人精选| 美女久久精品| 久久久男人天堂| 高清不卡亚洲| av最新在线| 久久久久久久欧美精品| 国产免费av国片精品草莓男男| 日本成人中文字幕在线视频| 蜜桃久久久久| 1024精品久久久久久久久| 91成人在线网站| 天堂日韩电影| 色综合视频一区二区三区日韩 | 国产精品亚洲综合久久| 蜜桃久久av一区| 国产91精品对白在线播放| 久久精品99久久无色码中文字幕| 丁香六月综合| 精品日韩视频| 日韩午夜精品| 人人精品久久| 欧美一级网址| 久久99久久久精品欧美| 日韩精品91| 国产精品专区免费| 视频国产精品| 免费成人在线视频观看| 欧美亚洲三区| 欧美日韩一区二区三区不卡视频| 中文亚洲欧美| 久久av免费| 欧美日韩国产在线一区| 国产精品多人| 日韩精品一卡二卡三卡四卡无卡| 精品中文字幕一区二区三区| 鲁大师精品99久久久| 在线精品小视频| 新版的欧美在线视频| 亚洲欧洲一区二区天堂久久| 国产一区二区三区精品在线观看 | 精品女同一区二区三区在线观看| av成人国产| 奇米777国产一区国产二区| 日韩高清电影免费| 中文精品视频| 成人福利av| 久久精品一区二区三区中文字幕| 欧美在线看片| 丁香婷婷久久| 爽好多水快深点欧美视频| 亚洲欧美日韩国产| 中文字幕一区二区三区日韩精品| 欧美国产免费| 天堂av在线| 日韩福利视频网| 999精品色在线播放| 国产乱码精品一区二区三区亚洲人| 日韩高清中文字幕一区| 好看不卡的中文字幕| 青青在线精品| 国产99在线| 免费久久精品视频| 亚洲久久一区| 国产亚洲欧洲| 国产精品极品在线观看| 久久久久久一区二区| 欧美韩一区二区| se01亚洲视频| 日本aⅴ免费视频一区二区三区| 国内在线观看一区二区三区| 日韩激情网站| 欧美日韩国产亚洲一区| 18国产精品| 日韩啪啪电影网| 欧美专区一区二区三区| 成人午夜亚洲| 日本亚洲欧洲无免费码在线| 久久精品主播| caoporn视频在线| 999久久久国产精品| 久久www成人_看片免费不卡| 欧美xxxx性| 久久av影视| 日韩亚洲精品在线| 色老板在线视频一区二区| 久久97久久97精品免视看秋霞| 久久精品国产久精国产爱| 亚洲美女久久精品| av资源亚洲| 亚洲二区在线| 国产精品www.| 欧美日韩午夜电影网| 日韩大片在线| 日本午夜精品久久久久| 精品一区视频| 野花国产精品入口| 国产精品香蕉| 一区二区精品伦理...| 日韩视频1区| 日本va欧美va精品| 青草国产精品久久久久久| 日韩精品午夜视频| 久久国产精品色av免费看| 美女视频一区在线观看| 97精品在线| 91tv亚洲精品香蕉国产一区| 国产一区日韩一区| 亚洲视频播放| 伊人久久一区| 青草国产精品久久久久久| 91成人在线网站| 精品久久网站| 日韩欧美在线中字| 精品一区亚洲| 久久成人精品| 91精品国产一区二区在线观看| 欧美国产精品| 日韩精品一区二区三区免费观影| 麻豆亚洲精品| 国产精品传媒麻豆hd| www.九色在线| 免费精品视频| 欧美日本精品| 成人日韩在线观看| 免费在线观看日韩欧美| 久久精品凹凸全集| 日韩欧美一区二区三区免费看| 日韩视频二区| 国产毛片精品久久| 快播电影网址老女人久久| 蜜臀va亚洲va欧美va天堂| 美女视频黄免费的久久| 五月婷婷六月综合| 国产精品15p| 国产二区精品| 国产亚洲精品精品国产亚洲综合| 国产在视频一区二区三区吞精| 五月天久久久| 国产精品一区毛片| 亚洲一本视频| 青青草伊人久久| 最新中文字幕在线播放| 视频一区欧美精品| 精品在线网站观看| 免费日韩一区二区| 久久wwww| 国产精品毛片在线| 欧美激情麻豆| 国产精品婷婷| 欧美xxxx中国| 蜜桃视频一区二区三区| 人在线成免费视频| 日韩精品视频在线看| 亚洲午夜一级| 国内精品美女在线观看|