我想知道如果我有一個門面類,我可以創建一個接口,並有多個類的實現。我可以在立面設計模式中使用界面嗎?
如:
interface IUserDetailFacade{}
public class UserDetailsFacade implements IUserDetailFacade{}
public class UserDetailsLdapFacade implements IUserDetailFacade{}
我想知道如果我有一個門面類,我可以創建一個接口,並有多個類的實現。我可以在立面設計模式中使用界面嗎?
如:
interface IUserDetailFacade{}
public class UserDetailsFacade implements IUserDetailFacade{}
public class UserDetailsLdapFacade implements IUserDetailFacade{}
當然可以。
您已經共享的例子是不是很詳細,我聽不懂的抽象(在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);
}
希望這有助於。
你在正確的軌道,因爲你的系統的其他部分將與抽象(即你的外觀接口)連接,而你能保證你的系統將與多個給定的工作整個外觀界面的實現。
沒有太多的工作在這裏,你能提供一個你的意圖的例子。 Facade模式的目的是抽象出多個相關的類層次體系的複雜性。所以,我可能會想念你的問題;然而,雖然外觀本身當然是一種抽象,但是它對於您正在嘗試討論的特定子系統具有諷刺意味。在這方面,你的問題沒有意義,因爲它就像是問'如果我有解決問題的方法,我可以使用相同的解決方案解決同一問題的另一種解決方案'。循環邏輯是你的,我只是把它指出來。 –