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