Constance Interface Pattern(CIP)(常數介面模式)
這是個 Anti-Pattern,應該使用其他方法取代它。
CIP 的定義如下
一個介面,該介面沒有任何方法,只有 final static 的常數。e.g.,
public interface ConstanceInterface {
public static final int CONSTANCE_INT_ZERO = 0;
public static final int CONSTANCE_INT_ONE = 1;
public static final int CONSTANCE_INT_TWO = 2;
}
想使用這些常數的類別可以藉由實作該介面來取得這些常數,e.g.,
public class ConstanceInterfaceImpl implements ConstanceInterface{
public int getConstanceInterfaceZero(){
return CONSTANCE_INT_ZERO;
}
}
CIP的缺點為若常數只提供給某些類別使用,那麼應該定義在該類別中,不需提供公共的介面。
反之,若常數是提供給多數類別使用,那麼可以改用 Utility Class 或是 enum。
Utility Class
public final class ConstanceUtil {
public static final int CONSTANCE_INT_ZERO = 0;
public static final int CONSTANCE_INT_ONE = 1;
public static final int CONSTANCE_INT_TWO = 2;
private ConstanceUtil(){
throw new AssertionError();
}
}
Enum
public enum ConstanceEnum {
CONSTANCE_INT_ZERO(0), CONSTANCE_INT_ONE(1), CONSTANCE_INT_TWO(2);
private final int mNumber;
private ConstanceEnum(int number) {
mNumber = number;
}
public int getNumber() {
return mNumber;
}
}
介面應該回歸於最原始的使用需求,定義型態。
除了定義型態以外不適合用於其他用途。