我可以在外观设计模式中有一个界面吗?
Can I have an interface in facade design pattern?
我想知道如果我有一个门面 class,我可以创建一个接口并拥有 class 的多个实现。
例如:
interface IUserDetailFacade{}
public class UserDetailsFacade implements IUserDetailFacade{}
public class UserDetailsLdapFacade implements IUserDetailFacade{}
您的方向是正确的,因为您系统的其他部分将与抽象(即您的外观接口)耦合,同时您可以保证您的系统将使用整个外观接口的多个给定实现。
当然可以。
您分享的示例不够详细,我无法理解如何再添加一层抽象(您想要创建的 interface
)。
但让我给你举个例子,说明这是有道理的。
Example
假设您正在创建一个应用程序来测试不同的 C++ 编译器编译相同源代码的效率。
您可以将 CppCompiler
创建为不同外观的 interface
,每种外观对应一种 CppCompiler
。
public interface CppCompiler {
void compile(String sourceFile);
}
TurboCppCompiler
、BorlandCppCompiler
、GccCppCompiler
等是 类 子系统的 facades,执行不同的步骤在编译中,如解析、汇编、链接等。例如,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 */
}
}
Usage
您可以创建一个获取编译器的工厂方法(注意 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);
}
希望这对您有所帮助。
我想知道如果我有一个门面 class,我可以创建一个接口并拥有 class 的多个实现。
例如:
interface IUserDetailFacade{}
public class UserDetailsFacade implements IUserDetailFacade{}
public class UserDetailsLdapFacade implements IUserDetailFacade{}
您的方向是正确的,因为您系统的其他部分将与抽象(即您的外观接口)耦合,同时您可以保证您的系统将使用整个外观接口的多个给定实现。
当然可以。
您分享的示例不够详细,我无法理解如何再添加一层抽象(您想要创建的 interface
)。
但让我给你举个例子,说明这是有道理的。
Example
假设您正在创建一个应用程序来测试不同的 C++ 编译器编译相同源代码的效率。
您可以将 CppCompiler
创建为不同外观的 interface
,每种外观对应一种 CppCompiler
。
public interface CppCompiler {
void compile(String sourceFile);
}
TurboCppCompiler
、BorlandCppCompiler
、GccCppCompiler
等是 类 子系统的 facades,执行不同的步骤在编译中,如解析、汇编、链接等。例如,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 */
}
}
Usage
您可以创建一个获取编译器的工厂方法(注意 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);
}
希望这对您有所帮助。