2012-07-11 8 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

이것은 직장에서 * 상수 인터페이스 * 안티 패턴입니다. –

+0

이것은 마커 인터페이스는 아니지만 상수 인터페이스입니다. –

+0

편리하고 비 범위 액세스를 원하는 경우에는 정적 가져 오기를 항상 사용할 수 있습니다. 나는 단순히 상수를 얻기 위해 인터페이스를 구현하는 것은 나쁜 형태라고 말하고 싶다. – Matt

답변

3

안티 패턴 것 그것을 구현 : 자바 프로그래밍 언어에서

, 상수 인터페이스 패턴 는 인터페이스의 사용은 전적으로 상수를 정의하는 설명하고 가진 클래스를 위해 해당 인터페이스를 구현 그 상수에 편리하게 접근하기 위해 구문 접근이 가능하다. 그러나 상수가 매우 인 경우가 많으므로 클래스에 의해 구현 된 인터페이스가 내 보낸 API의 일부이기 때문에이 연습은 으로 간주되는 구현 세부 정보를 에 넣습니다. [1] [2] 일반적으로 시스템 상수를 클래스와 무관하게 수집하면 빈약 한 객체 지향적 인 디자인을 생성 할 수 있습니다. 이는 종종 응집력이 약하기 때문입니다. 이러한 의 경우 상수 인터페이스 구현이 안티 패턴으로 간주됩니다.

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

와 관련 마커 인터페이스는 당신이 그것을 here을 확인할 수 있습니다.

1

가 실제로 마르크 클래스 등을하고자하는 경우 난 단지 마커 인터페이스를 부를 것이다 특정 재산을 가지고있는 경우, 나는 instanceof 검사가 작동하도록 인터페이스를 구현하십시오. 방금 상수를위한 편리한 장소로 사용하려는 경우 마커 인터페이스라고 부르지 않고 구현 클래스의 공용 얼굴에 구현 세부 사항을 추가하기 때문에 클래스를 구현하지 않아도됩니다.

관련 문제