Java中物件導向的設計原則

jdon發表於2019-05-29

學習物件導向程式設計(如抽象,  封裝,  多型和  繼承)的基礎知識非常重要  。但是,與此同時,瞭解物件導向的設計原則,建立清潔和模組化設計同樣重要。這些指南有助於設計強大的物件導向的軟體設計。

封裝變化的內容

  • 如果您知道您的程式碼將來會發生變化,請將其分開。
  • 這種OOPS設計原則的好處是可以輕鬆測試和維護適當的封裝程式碼。
  • 只有一件事在軟體領域是不變的,那就是“改變”,所以封裝你期望或懷疑將來要改變的程式碼。
  • 如果您使用Java進行編碼,則遵循預設情況下將變數和方法設為私有的原則,並逐步增加訪問許可權,例如從私有到受保護而不是公共。Java中的一些設計模式使用Encapsulation,Factory設計模式是Encapsulation的一個示例,它封裝了物件建立程式碼,並提供了以後引入新產品的靈活性,而不會影響現有程式碼。

程式碼到介面而不是實現

  • 始終為介面程式設計而不是為了實現,這將導致靈活的程式碼,可以與介面的任何新實現一起工作。
  • 在Java中使用變數的介面型別、方法的返回型別或方法的引數型別。這已經被許多Java程式設計師所建議,包括Effective Java和Head First設計模式書。

授權原則

  • 不要自己做所有事情,把它委託給各自的類。委託設計原則的經典示例是  Java中的equals()  和  hashCode()方法。
  • 為了比較兩個物件是否相等,我們要求類本身進行比較,而不是讓客戶端類進行檢查。這種設計原則的好處是程式碼不重複,並且很容易修改行為。

開放封閉原則(OCP)

  • 類應該是擴充套件時開放,修改時關閉。
  • 類、方法或函式應為擴充套件開啟(新功能),併為修改關閉。
  • 這種物件導向設計原則的好處是,它可以防止有人改變已經經過試驗和測試的程式碼。

不要重複自己

  • 透過抽象常見事物並將它們放在一個位置來避免重複程式碼。
  • 使用抽象類在一個地方抽象公共事物。如果程式碼塊位於兩個以上的位置,請考慮將其設定為單獨的方法,或者如果多次使用硬編碼值,請將其設定為公共靜態最終常量。
  • 這種物件導向設計原則的好處在於維護。

單一責任原則(SRP)

  • 我們的Web應用程式中的每個物件都應該承擔單一責任,並且所有物件的服務應該專注於承擔單一責任(SRP)。
  • 如果在Java中的一個類中放置多個功能,它會引入兩個功能之間的耦合,即使您更改了一個功能,也有可能破壞耦合功能,這需要另一輪測試以避免在生產環境中產生任何意外。

利斯科夫的替代原則(LSP)

  • 子類應該適合它們的基類。
  • 根據Liskov替換原則,子型別必須可替代超型別,即使用超型別的方法或函式必須能夠與子類的物件一起工作而沒有任何問題。
  • LSP與單一責任原則和介面隔離原則密切相關。如果一個類具有比子類更多的功能則可能不支援某些功能並且違反了LSP。

介面隔離原理(ISP)

  • 介面隔離原則規定,如果客戶端不使用該介面,則不應實現該介面。
  • 這種情況主要發生在一個介面包含多個功能,而客戶端只需要一個功能而不需要其他功能時。介面設計是一項棘手的工作,因為一旦釋放介面,就無法在不破壞所有實現的情況下更改介面。
  • Java中這種設計原則的另一個好處是,介面的缺點是在任何類都可以使用之前實現所有方法,因此具有單一功能意味著更少的實現方法。

依賴注入或反演原則

  • 不要要求依賴,它將由框架提供給您。這在Spring框架中得到了很好的實現,這個設計原則的優點在於任何由DI框架注入的類都易於使用模擬物件進行測試並且更易於維護,因為物件建立程式碼集中在框架中而客戶端程式碼中則沒有。
  • 實現依賴注入的方法有多種,比如使用位元組碼插入,這是一些AOP(面向方面程式設計)框架(如AspectJ)所做的,或者使用代理(如Spring中使用的代理)。請參閱IOC和DI設計模式的示例,以進一步瞭解這個可靠的設計原則。

相關文章