JAVA物件導向設計過程中的反面模式

來源:互聯網
上載者:User

 

我們看過許許多設計模式的理論,實際工作過程中也或多或少的使用過設計模式,不同類型設計模式適用於不同的應用場合,但如果設計模式使用不當,不但無法協助產品提升,反而會導致日後的重蹈覆轍。因此,我們有必要瞭解在日常工作中經常錯誤使用模式的場合,通常將這些內容稱之為反面模式(anti-pattern)。

   反模式(anti-pattern)是指在實踐中經常出現,會導致效率低下的有待最佳化的設計模式。反面模式的類型多種多樣,其中包含專案管理、團隊管理、分析方式、編程、方法學、測試、組態管理等多個方面,今天主要介紹物件導向設計過程中常見反面模式:

      1.基類(BaseBean):繼承一個工具類,而不是代理它

      這種對象設計錯誤在開發過程中是非常常見的,通常造成這種設計錯誤是為了使用方便,繼承一個工具類,可以非常方便的在對象中使用工具類提供的方法,但這種設計會造成了對象意義混亂,通常只有在分類學角度上具有意義時,才使用繼承,從裡氏替換原則考慮,一個工具類必定有自己特定的行為特徵,一個封裝了邏輯的對象,不可能是工具類型的一中,因此,不要從工具類繼承,如果要使用或者擴充工具類服務,使用代理模式是較好的選擇。

     2.調用父類(Call super):需要子類調用父類中被子類重載的方法

     在物件導向設計中,子類具有拓展超類的責任,而不是具有置換掉或登出掉超類的責任。如果子類需要大量的置換掉超類的行為,那麼這個子類不應當成為這個超類的子類。如果子類需要調用父類中被子類重載的方法,這是非常不合理的,子類應當具備父類的所有特性,同時是對父類的擴充。

     3.不羈的對象(Objectorgy):沒有成功封裝對象,外部可以不受限制地訪問它的內部

      這也是開發過程中的常見現象,通常是為了減少代碼量,例如對象屬性均使用public修飾符,這樣可以減少編寫對象類時的存取碼,但這也使得對象封裝沒有了意義。

     4.幽靈(Poltergeists):指這樣一些對象,它們唯一的作用就是把資訊傳給其它對象

     如果在設計的時候已經確定一個對象向另外一個對象傳送的資訊內容,使用對象封裝傳送是很不好的,這種對象作用非常單一,也是沒必要的,和幽靈一樣!

     5.順序耦合(Sequentialcoupling):指這樣一些對象,它們的方法必須要按某種特定順序調用

   如果方法需要按特定順序調用,良好的對象設計應當把這些方法順序調用的邏輯封裝在對象內部,而不是要求外包調用時按照特定的順序,這極容易造成對象使用錯誤。

    6.單例愛好者(Singletonitis):濫用單例(singleton)模式

   單例模式的意思就是確保某一個類只有一個執行個體,而且自行執行個體化並向整個系統提供這個執行個體,通常是為了避免當執行個體存在多個時可能會造成程式邏輯錯誤的問題。濫用單例模式會造成許多問題,例如對象並發訪問等。

    8.又TMD來一層(Yet Another FuckingLayer):向程式中添加不必要的階層、庫或是架構。

    這種情況在構建技術架構時很常見,JAVA有眾多的開源架構或者庫,因此,在構建技術架構初期,經常把許多沒必要的庫、架構引入。這對開發及最終目標系統都沒好處,會導致整個系統技術架構混亂及運行時的效能問題。

    9.唷唷問題(Yo-yo problem):一個結構(例如繼承)因為過度分裂而變得難於理解

    對象設計時,沒有意義的分裂對象是個災難,除了導致最終對象結構難以理解外沒有任何好處。

    10.對象糞池(Object cesspool):複用那些不滿足複用條件的對象。

      對不滿足複用條件的對象複用,本身就是個災難!

    11.空子類的錯誤(Empty subclassfailure):建立不能通過“空子類測試”的類,因為它和直接從它繼承而來沒有做其它任何修改的子類表現得不同

      建立了一個子類,該子類不具備父類的特徵,從物件導向設計而言,這不符合繼承。

    12.上帝對象(God object):在設計的單一部分(某個類)集中了過多的功能

    合適的對象行為在物件導向設計過程中非常重要,在單一部分集中了過多的功能會導致後續的類維護變得極為困難。

 

更多反面模式,參見:

http://zh.wikipedia.org/wiki/%E5%8F%8D%E9%9D%A2%E6%A8%A1%E5%BC%8F#.E7.BC.96.E7.A8.8B.E4.B8.8A.E7.9A.84.E5.8F.8D.E6.A8.A1.E5.BC.8F

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.