我想知道如果我有一个Facade类,我可以创建一个接口并拥有该类的多个实现。
E.g:
interface IUserDetailFacade{}
public class UserDetailsFacade implements IUserDetailFacade{}
public class UserDetailsLdapFacade implements IUserDetailFacade{}
答案 0 :(得分:1)
您处于正确的轨道,因为您的系统的其他部分将与抽象(即您的外观界面)相结合,同时您可以保证您的系统将使用整个外观界面的多个给定实现。
答案 1 :(得分:1)
当然可以。
您分享的示例并不是非常详细,我可以理解如何再插入一个抽象层(您想要创建的interface
)。
但是,让我举个例子来说明这一点。
实施例
假设您正在创建一个应用程序,用于测试不同C ++编译器编译相同源代码的效率。
您可以将CppCompiler
创建为interface
到不同的立面,每种类型CppCompiler
各一个。
public interface CppCompiler {
void compile(String sourceFile);
}
TurboCppCompiler
,BorlandCppCompiler
,GccCppCompiler
等是类的子系统的 facade ,它们在编译中执行不同的步骤,如解析,组装,链接等等。例如,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);
}
希望这有帮助。