2014-03-30 39 views
0

這是一個最佳實踐類型的問題。可選方法,不會混亂擴展類型

假設我有一個抽象類Screen,它實現了一些接口。

現在的事情是,接口添加了大量的方法,我敢肯定不是所有的屏幕實現都會使用它們。

我想知道什麼是最常見和最乾淨的方式來做到這一點。

  1. 剛剛離開他們的抽象

    添加了混亂的擴展類

    protected abstract void onFocus(); 
    
  2. 添加空體

    的人不熟悉的擴展類也不好,他們可能會擔心如果可以重寫它們。

    protected void onFocus() { 
        // no impl 
    } 
    
  3. 做一些描述註釋?

    我不確定這是否適合他們。

    @NotImplemented 
    protected void onFocus() { 
        // no impl 
    } 
    

你許了什麼考慮最好?

+0

如果每個Screen對這個方法有不同的實現,或者他們可以選擇不通過拋出'NotSupportedOperationException'或類似的東西來實現,那麼我喜歡第一個選項 –

+0

在Java 8中,你也可以在接口本身實現'default'方法。 –

+0

我知道,不幸的是我認爲在Java 8可以用於生產之前至少需要兩年的時間。 – MightyPork

回答

0

只有選項二(添加空體)保留'可選'方法的要求。我寧願不強制所有擴展器實現所有可選方法,這將使它們不是可選的,對嗎?可能你可以編寫基本的抽象類/類來提供一些默認行爲,這將使你使用API​​更簡單。 SpirngMVC使用這種模式允許您在控制器的不同生命週期中執行一些邏輯。

+0

最後這樣做,所以你得到一個觀點:) – MightyPork