2016-11-13 8 views
0

저는 작업중인 Java 응용 프로그램에 대한 플러그인 아키텍처를 가지고 있습니다.Java : 해체가 두 개의 클래스로 "구현"됩니다.

모든 예제가 보여 "SpecialName는"당신이이 플러그인으로 인식하고 BaseExtenderClass는, ClassB가, ClassC는 모두 다른 API 있습니다 되려면 클래스 이름을 가지고 이름입니다

public class SpecialName implements BaseExtenderClass, ClassB, ClassC { 
    //Stuff 
    } 

특정 작업을 수행하기 위해 한 클래스에서 확장 된 기능. 각각은 구현 되어야만하는 고유의 메소드를 가지고 있습니다.

궁금한 점은 Java에서 방법이 있다면 나는 ClassName과 ClassC를 SpecialName이있는 BaseExtenderClass와는 별도의 파일에 넣을 수 있으며 위에 나열된 원래 코드처럼 모든 집중적 인 용도로 동작해야한다는 것입니다.

필자가 쓰고있는 플러그인이 실제로 사용할 수있는 API 인터페이스 중 6-8 개를 확장 할 것이므로 코드를 더 깔끔하고 체계적으로 만들 수 있습니다.

그렇지 않으면 거대한 파일 하나를 가질 수 있습니다. 일을 제대로 수행하는 것처럼 느껴지지 않습니다.

답변

1

인터페이스 정의 또는 구현 코드를 분할하려고합니까?

나는 3 개의 인터페이스 모두에 대한 구현 코드를 같은 클래스에 넣고 싶지는 않지만 잠재적 인 크기에 대해 언급했기 때문에 2 개 이상의 파일 (클래스)로 분리해야한다고 말한 것 같습니다. .

이 경우 (해당되는 이유가 있다고 가정합니다) ClassB 및 ClassC를 구현 한 중간 클래스를 만든 다음 해당 클래스에서 상속해야합니다.

이런 식으로 뭔가 ...

public class TmpClass implements ClassB, ClassC { 
    //put implementation for these 2 interfaces here 
} 

public class SpecialName extends TmpClass implements BaseExtenderClass { 
    //add implementation for BaseExtenderClass interface here 
} 
+0

감사의. 이것은 의미가 있으며, 나는 이것을 할 수 있어야합니다. – Doug

1

귀하의 예를 조금 혼란이다. 나는 정말해야한다고 생각 :

public class SpecialName extends BaseExtenderClass 
    implements InterfaceB, InterfaceC { 

요점은 :

  • 클래스 수 (! 최대) extend 다른 하나의 클래스를.
  • 클래스는 복수 인터페이스 수 implement 수 있습니다.
  • 클래스는 implement 클래스가 될 수 없습니다.

은 어떻게 당신은 당신이 복잡한 인터페이스 계층 구조를 가지고있는 경우를 처리 할 당신은 인터페이스 메소드의 구현 코드를 중복되지 않도록하려면?

당신이 할 수있는 최선은 다음의 조합이다 :

  • 부분적으로 거울의 base class 상속 할 수없는 방법의 중복과 트리, 같은 인터페이스 그래프; 예 :

    public class MyClass extends BaseAB 
         implements InterfaceA, InterfaceB { 
         // specific methods for MyClass 
        } 
    
        public class BaseAB extends BaseA 
         implements InterfaceA, InterfaceB { 
         // base methods for InterfaceB 
        } 
    
        public class BaseA implements InterfaceA { 
         // base methods for InterfaceA 
        } 
    
  • 공통 기능을 구성 요소로 구현하고 기본 클래스를 래퍼로 만듭니다. 예 :

    public class MyClass implements InterfaceA, InterfaceB { 
         private InterfaceA a = new MyA(...); 
         private InterfaceB b = new MyB(...); 
    
         public void methodInA(...) { 
          a.methodInA(...); 
         }; 
    
         // more adapter methods, as above 
    
         // specific methods for MyClass 
        }