Конечно, вы можете.
Пример, который вы поделились не достаточно подробно для меня, чтобы понять, как еще один уровень абстракции (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 */
}
}
Использования
Вы можете создать фабричный метод, который получает компилятор (обратите внимание, как CppCompiler
используются в качестве return
типа здесь)
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);
}
Надеется, что это помогает.
Не так много для работы здесь, можете ли вы привести пример своих намерений. Целью шаблона «Фасад» является абстрактная сложность множества связанных систем иерархии классов. Таким образом, я могу пропустить интерпретацию вашего вопроса; однако, в то время как фасад, конечно, является абстракцией сам по себе, он по иронии судьбы подходит к конкретным подсистемам, которые вы пытаетесь пререкаться. В этом отношении ваш вопрос не имеет смысла, потому что это похоже на вопрос: «Если у меня есть решение проблемы, я могу найти другое решение по той же проблеме, используя одно и то же решение». Круговая логика твоя, я просто указываю. –