Bien sûr, vous pouvez.
L'exemple que vous avez partagé n'est pas assez détaillé pour moi de comprendre comment une couche supplémentaire d'abstraction (le interface
vous voulez créer) s'intègre.
Mais laissez-moi vous donner un exemple où cela aurait avoir un sens.
Exemple
Supposons que vous créez une application qui teste comment compilateurs efficacement différents C++ compilez le même code source.
Vous pouvez créer CppCompiler
en tant que interface
sur différentes façades, une pour chaque type de CppCompiler
.
public interface CppCompiler {
void compile(String sourceFile);
}
TurboCppCompiler
, BorlandCppCompiler
, GccCppCompiler
, etc. sont façades d'un sous-système de classes qui font différentes étapes dans la compilation comme l'analyse syntaxique, l'assemblage, la liaison, etc. Par exemple, la mise en œuvre TurboCppCompiler
ressemblerait à quelque chose comme ça .
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 */
}
}
Utilisation
Vous pouvez créer une méthode de fabrication qui obtient un compilateur (remarquez comment le CppCompiler
est utilisé comme un type return
ici)
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);
}
Hope this helps.
Pas grand chose à faire ici, pouvez-vous donner un exemple de votre intention. Le but du modèle de Façade est d'abstraire la complexité de plusieurs systèmes connexes de hiérarchie de classe. Donc, je peux manquer d'interpréter votre question; cependant, alors que la façade est bien sûr une abstraction en soi, elle est ironiquement adaptée aux sous-systèmes spécifiques que vous essayez de détruire. À cet égard, votre question n'a pas de sens, car c'est comme demander: «Si j'ai une solution à un problème, puis-je avoir une autre solution au même problème en utilisant la même solution». La logique circulaire est à vous, je ne fais que le signaler. –