2016-12-11 2 views
0

Facade 클래스가 있는지 알고 싶습니다. 인터페이스를 만들고 클래스의 여러 구현을 할 수 있습니까?외관 디자인 패턴으로 인터페이스를 사용할 수 있습니까?

예 : 시스템이 주어진 여러 작업 것이라는 점을 보장 할 수있는 동안 시스템의 다른 부분 (즉 당신의 외관 인터페이스) 추상화와 결합되기 때문에 당신은 올바른 궤도에있어

interface IUserDetailFacade{} 

public class UserDetailsFacade implements IUserDetailFacade{} 

public class UserDetailsLdapFacade implements IUserDetailFacade{} 
+0

여기서는별로 도움이되지 않지만 원하는 의도를 보여줄 수 있습니까? Facade 패턴의 목적은 클래스 계층 구조의 여러 관련 시스템의 복잡성을 추상화하는 것입니다. 그래서, 나는 당신의 질문을 해석하지 못할 수도 있습니다; 그러나 외관은 당연히 그 자체로 추상적 인 것이지만, 논리적으로 당신이 논쟁하고있는 특정 서브 시스템에 맞추어 져 있습니다. 그런 점에서 당신의 질문은 이해가되지 않습니다. 왜냐하면 '제가 문제에 대한 해결책을 가지고 있다면 같은 해결책을 사용하여 같은 문제에 대한 또 다른 해결책을 얻을 수 있습니다.'라고 묻는 것과 같기 때문입니다. 순환 논리가 당신 것입니다, 나는 그것을 지적하고 있습니다. –

답변

1

물론 가능합니다.

당신이 공유 한 예는. 저를 추상화합니다 (이 interface 만들려)의 또 하나 개의 층에 맞는 방법을 이해하는

아주 상세하지 않다 그러나 저가 당신에게 예를 곳은 것이다하자 말이 되네.

예는 다른 C++ 컴파일러는 같은 소스 코드를 컴파일하는 방법을 효율적으로 테스트 응용 프로그램을 만드는 가정하자.

CppCompiler의 각 유형별로 각기 다른 외관에 interface으로 CppCompiler을 생성 할 수 있습니다.

public interface CppCompiler { 
    void compile(String sourceFile); 
} 

TurboCppCompiler, BorlandCppCompiler, GccCppCompiler 등 예를 들어, TurboCppCompiler 구현은 다음과 같이 보일 것 등, 연결, 조립 분석과 같은 편집에서 다른 단계를 수행 클래스의 서브 시스템의 외관 있습니다 .

public class TurboCppCompiler implements CppCompiler { 

    // .. private variables 

    public TurboCppCompiler(TurboParser parser, TurboAssembler assembler, TurboLinker linker) { 
     this.parser = parser; 
     this.assembler = assembler; 
     this.linker = linker; 
    } 

    public void compile(String sourceFile) { 
     /* Compile the code Borland Cpp style using the subsystems Parser, Assembler, Linker */ 
    } 
} 

당신은 컴파일러를 얻는 팩토리 메소드를 만들 수 있습니다

사용이 도움이

public static CppCompiler createCppCompiler(CompilerType type) { 
    switch (type) { 
     case TURBO: 
      return new TurboCppCompiler(new TurboParser(), new TurboAssembler(), new TurboLinker()); 
     case BORLAND: 
      return new BorlandCppCompiler(new BorlandParser(), new BorlandAssembler(), new BorlandLinker()); 
     case GCC: 
      return new GccCppCompiler(new GccParser(), new GccAssembler(), new GccLinker()); 
    } 
    throw new AssertionError("unknown compiler type:" + type); 
} 

희망합니다 (CppCompiler가 여기에 return 유형으로 사용되는 방법을 알).

1

전체 façade 인터페이스의 구현.