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; } }
介面應該回歸於最原始的使用需求,定義型態。
除了定義型態以外不適合用於其他用途。