2012-07-11 83 views
2

如果我有一個簡單的標記接口(不包含方法),其中包含在我的應用程序中使用的常量,導入接口的類和實際實現接口之間是否有區別?標記接口,實現與導入

接口:

public interface MyConstants { 
    String constant1 = "constant1"; 
    String constant2 = "constant2"; 
} 

實現:

public class MyClass implements MyConstants { 
    public MyClass(){ 
     System.out.println(constant1); 
    } 
} 

導入:

import common.constants.MyConstants 
public class MyClass { 
    public MyClass(){ 
     System.out.println(MyConstants.constant1); 
    } 
} 
+3

這是*常數界面*工作中的反模式。 – 2012-07-11 14:20:34

+0

這不是標記接口,而是一個常量接口。 – 2012-07-11 14:23:24

+0

更不用說,如果你想要方便的,非範圍的訪問,你總是可以使用靜態導入。我會說,簡單地實現一個接口來獲取常量是不好的形式。 – Matt 2012-07-11 16:58:57

回答

3

實施這將是一個反模式:

在Java編程語言,不斷接口模式 描述了使用界面的單獨定義常量和 有類實現,以便接口實現方便的 句法訪問這些常量。然而,由於常量只是一個實現細節,並且一個類實現的接口是其導出的API的一部分,所以這種做法相當於 將實現細節放入API中,這被認爲是 不適當。 [1] [2]一般來說,將系統常量收集爲與行爲無關的類,可能會創建一個不良的面向對象的設計,因爲它往往是內聚性較低的標誌。對於這些 原因,實現常量接口被認爲是反模式 。

http://en.wikipedia.org/wiki/Constant_interface

以及有關標記接口,你可以檢查它here

1

我只會把它稱爲一個標記接口,如果打算真正馬克類作爲有一個特定的財產,在這種情況下,他們必須我修復instanceof檢查工作的接口。如果它只是作爲常量的一個方便位置,那麼我不會將它稱爲標記接口,並且我也不會有任何類實現它,因爲它會爲實現類的公共面添加一些東西,這只是一個實現細節。