我有一個應用程序,其中一些對象都在擴展一個抽象類,它定義的方法如create()
edit()
retrieve()
和delete()
。由於每個子類對這些函數都使用相同的邏輯,所以抽象類定義了默認行爲,並且在少數情況下需要擴展它們,子類可以覆蓋或使用我內置的鉤子。預防/限制方法繼承
現在我遇到了一些子類需要不可變的情況,這意味着它們不應該有edit()
或delete()
方法。這對我來說聽起來像是一個名爲類似immutable
的界面的工作,其中不可變類可以實現。問題在於接口不會阻止方法被調用,它們只是強制執行方法的存在。所以這顯然不會起作用。
製作兩個父類,一個用於可變對象,另一個用於不可變對象,這很醜陋,並且可能會要求維護的問題。我可以讓不可變的對象用一個沒有任何作用的空方法覆蓋違規方法,但是這看起來也很麻煩,就像我沒有在那個時候做適當的OOP一樣。
那麼你會提出什麼樣的建議,作爲允許大量類的所有類都繼承一組方法的最佳方法,但是對於其中的一些方法來說,它們不能繼承所有方法? (有問題的應用程序是用PHP編寫的,但來自任何語言的通用OOP技術仍然可以有所幫助)。
因此,如果我理解正確,層次結構將如下所示:Base-> Immutable_Base-> Immutable_Children和Base-> Mutable_Children?到那時,我會更好地讓Mutable_Base類放置在Base和Mutable_Children類之間? – 2012-01-12 05:52:26
恕我直言Mutable_Base是不必要的,因爲Mutable是基本情況。然而這取決於你和你的美感。有些人強烈喜歡他們的班級樹木中的對稱性。 – 2012-01-12 06:03:13