4.10 java類的設計技巧


0.前言

應用這些技巧可以使得設計出來的類更具有 OOP 的專業水準

1. 一定要保證數據私有

  • 這是最重要的;絕對不要破壞封裝性。
  • 有時候, 需要編寫一個訪問器方法或更改器方法, 但是最好還是保持實例域的私有性。
  • 很多慘痛的經驗告訴我們, 數據的表示形式很可能會改 變, 但它們的使用方式卻不會經常發生變化。
  • 當數據保持私有時, 它們的表示形式的變化不 會對類的使用者產生影響, 即使出現 bug 也易於檢測。

2. 一定要對數據初始化

  • Java 不對局部變量進行初始化, 但是會對對象的實例域進行初始化。
  • 最好不要依賴於系統的默認值, 而是應該顯式地初始化所有的數據, 具體的初始化方式可以是提供默認值, 也 可以是在所有構造器中設置默認值。

3. 不要在類中使用過多的基本類型

  • 就是說,用其他的類代替多個相關的基本類型的使用。這樣會使類更加易於理解且易於 修改。
  • 由於JAVA的基本類型會有默認值,例如當某個類中存在private int age;字段時,創建這個類時,age會有默認值0。當使用age屬性時,它總會有值。因此在某些情況下,便無法實現age爲null。並且在動態SQL的部分,如果使用age!=null進行判斷,結果總會爲true,因而會導致很多隱藏的問題。所以,在JAVA實體類中不要使用基本類型,基本類型包含byte、int、short、long、float、double、char、boolean。

4. 不是所有的域都需要獨立的域訪問器和域更改器

  • 或許, 需要獲得或設置僱員的薪金。而一旦構造了僱員對象, 就應該禁止更改僱用日 期,並且在對象中,常常包含一些不希望別人獲得或設置的實例域
  • 就是指getxxx()和setxxx()方法不是每個域/變量都有的
  • 有些數據不允許更改或查詢

5.將職責過多的類進行分解

  • 這樣說似乎有點含糊不清, 究竟多少算是“ 過多” ? 每個人的看法不同。但是,如果明 顯地可以將一個複雜的類分解成兩個更爲簡單的類,就應該將其分解(但另一方面,也不要 走極端。設計 10 個類,每個類只有一個方法,顯然有些矯枉過正了) 。

6. 類名和方法名要能夠體現它們的職責

  • 與變量應該有一個能夠反映其含義的名字一樣, 類也應該如此(在標準類庫中, 也存在 着一些含義不明確的例子, 如:Date類實際上是一個用於描述時間的類)。
  • 命名類名的良好習慣是採用一個名詞(Order)、 前面有形容詞修飾的名詞( RushOrder) 或動名詞(有“ -ing” 後綴)修飾名詞(例如:BillingAddress)。
  • 對於方法來說,習慣是訪問 器方法用小寫 get 開頭 (getSalary), 更改器方法用小寫的 set 開頭(setSalary)

7.優先使用不可變的類

  • LocalDate 類以及 java.time 包中的其他類是不可變的——沒有方法能修改對象的狀態。類似 plusDays 的方法並不是更改對象,而是返回狀態已修改的新對象。
  • 更改對象的問題在於, 如果多個線程試圖同時更新一個對象,就會發生併發更改。其結 果是不可預料的。如果類是不可變的,就可以安全地在多個線程間共享其對象。
  • 因此, 要儘可能讓類是不可變的, 這是一個很好的想法。對於表示值的類, 如一個字符 串或一個時間點,這尤其容易。計算會生成新值, 而不是更新原來的值。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章