設計迷蹤:給JAVA設計開發新手的一些建議和意見(三)

來源:互聯網
上載者:User
【空介面的使用】
 在介面使用的時候,空介面有2種情況:
 1.類似Cloneable,Serializable,他們往往是做一個標記,表示需要某個功能.當然你也可以這麼用,來表示你的類具有某個功能,實現了你的某個介面.
 2.你的介面繼承了別的介面(非空),你的介面本身沒有聲明函數.這種情況一般是你不希望使用者使用父介面來作為參數類型,因為他們的用途可能不同,此時就可以用空介面來實現.
 第一種情況我們不再多說,搜尋一下關於Cloneable,Serializable的文章就會瞭解很多.
 我們來看下面的代碼:
  public interface Text
  {
   String getText();
  }
  public interface SqlText extends Text
  {
  }
 可以看到,Text介面是用於返回一個字串.而SqlText是一個空介面,它繼承了Text介面.也就是說SqlText也是一種Text.但是我們可以知道,任何一個字串不一定是Sql字串,所以此時聲明了一個SqlText介面來用於表名當前的字串是一個Sql字串.你的函數可以這樣聲明:
  public void doQuery(SqlText aSqlText)
而不是這樣
  public void doQuery(Text aText)
避免使用者產生歧義的想法,一眼看去,就明白應該傳入一個Sql字串.
【繼承層次過多】
 一般來說,繼承的層次不要過多,否則使用者可能會討厭,找一個函數會很麻煩.很多Java語言檢查工具都建議你的繼承層次不要超過3層.
【Has A ,Is A,不要濫用繼承】
 "我是一個Mp3","我有一個Mp3",其實很容易分辨.但是在實際應用中,往往存在把"我有一個Mp3"的情況當作"我是一個Mp3",或者是為了偷懶方便而放鬆了對自己的要求,甚至還沾沾自喜,感覺找到一個捷徑.(scud以前也幹過這種事情).
 以前我曾經這樣幹過:我的邏輯類直接繼承了我的資料庫訪問類,這樣我可以直接在邏輯類裡面訪問:
  public MyLogic extends MyDBA
  aLogic.getInt("click");
  aLogic.getString("name");
 看起來是非常方便,但是你的邏輯類就牢牢綁在了DBA上,是一種非常不好的做法.現在我這樣聲明:
  public MyLogic
   MyDBA adba;
   adba.getInt("click");
   adba.getString("name");
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.