2016-12-11 88 views
0

我想知道如果我有一個門面類,我可以創建一個接口,並有多個類的實現。我可以在立面設計模式中使用界面嗎?

如:

interface IUserDetailFacade{} 

public class UserDetailsFacade implements IUserDetailFacade{} 

public class UserDetailsLdapFacade implements IUserDetailFacade{} 
+0

沒有太多的工作在這裏,你能提供一個你的意圖的例子。 Facade模式的目的是抽象出多個相關的類層次體系的複雜性。所以,我可能會想念你的問題;然而,雖然外觀本身當然是一種抽象,但是它對於您正在嘗試討論的特定子系統具有諷刺意味。在這方面,你的問題沒有意義,因爲它就像是問'如果我有解決問題的方法,我可以使用相同的解決方案解決同一問題的另一種解決方案'。循環邏輯是你的,我只是把它指出來。 –

回答

1

當然可以。

您已經共享的例子是不是很詳細,我聽不懂的抽象(在interface要創建的)的又一個層中如何適應。

但讓我給你舉個例子,這將合理。

假設你正在創建測試不同的C++編譯器如何高效地編譯相同的源代碼的應用程序。

您可以創建CppCompiler作爲interface到不同的外牆,每個類型CppCompiler每個類型一個。

public interface CppCompiler { 
    void compile(String sourceFile); 
} 

TurboCppCompilerBorlandCppCompilerGccCppCompiler等都是它做的像解析編譯不同的步驟類,組裝一個子系統的外牆,鏈接等。例如,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); 
} 

希望這有助於。

1

你在正確的軌道,因爲你的系統的其他部分將與抽象(即你的外觀接口)連接,而你能保證你的系統將與多個給定的工作整個外觀界面的實現。