<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ## 什么是Facade模式 外部和一個系統通信必須通過一個統一的門面(facade)對象進行 facade模式的本質:封裝交互,簡化調用 很好的提現了 ***最小知識原則*** ## 場景 外部系統P要與系統Q的多個模塊進行通信,分別是A模塊、B模塊、C模塊等等。這時候對于系統P來說就很麻煩,因為他要熟知系統Q下到底有多少模塊以及每個模塊具體是干嘛的,復雜度很高。 解決這種不便的方式是在系統Q種引入一個facade對象,主要用于轉發。 那么,對于所有外部系統來說,只需要與facade對象交互月底即可,極大的降低了復雜度。 ## 結構 ![](https://img.kancloud.cn/3e/7c/3e7c2ded78b9990387e6521b947164a0_255x273.png) ## 例子 ### 新增幾個模塊對象 ``` package com.mk.designDemo.designs.facade.module; public class ModuleA { public static void methodA() { System.out.println("invoke method A"); } } package com.mk.designDemo.designs.facade.module; public class ModuleB { public static void methodB() { System.out.println("invoke method B"); } } package com.mk.designDemo.designs.facade.module; public class ModuleC { public static void methodC() { System.out.println("invoke method C"); } } ``` 新增一個config對象 ``` package com.mk.designDemo.designs.facade; import lombok.Data; import lombok.experimental.Builder; @Data @Builder public class FacadeConfig { private boolean config1; private boolean config2; private boolean config3; } ``` 新增一個Facade對象 ``` package com.mk.designDemo.designs.facade; import com.mk.designDemo.designs.facade.module.ModuleA; import com.mk.designDemo.designs.facade.module.ModuleB; import com.mk.designDemo.designs.facade.module.ModuleC; public class SystemFacade { private SystemFacade(){} public static void doSomething(FacadeConfig config) { if(config.isConfig1()){ ModuleA.methodA(); } if(config.isConfig2()){ ModuleB.methodB(); } if(config.isConfig3()){ ModuleC.methodC(); } } } ``` 新增測試類 ``` package com.mk.designDemo.facade; import com.mk.designDemo.designs.facade.FacadeConfig; import com.mk.designDemo.designs.facade.SystemFacade; import com.mk.designDemo.designs.facade.module.ModuleA; import com.mk.designDemo.designs.facade.module.ModuleB; import com.mk.designDemo.designs.facade.module.ModuleC; import org.junit.Test; public class FacadeTest { @Test public void beforeFacade(){ // 外部系統P需要與A、B、C三個模塊交互 ModuleA.methodA(); ModuleB.methodB(); ModuleC.methodC(); // 外部系統M需要與A、B三個模塊交互 ModuleA.methodA(); ModuleB.methodB(); // 外部系統M需要與B、C三個模塊交互 ModuleB.methodB(); ModuleC.methodC(); } @Test public void afterFacade(){ // 外部系統P需要與A、B、C三個模塊交互 SystemFacade.doSomething(FacadeConfig.builder().config1(true).config2(true).config3(true).build()); // 外部系統M需要與A、B三個模塊交互 SystemFacade.doSomething(FacadeConfig.builder().config1(true).config2(true).build()); // 外部系統M需要與B、C三個模塊交互 SystemFacade.doSomething(FacadeConfig.builder().config2(true).config3(true).build()); } } ``` 經過測試,我們發現運行結果完全一致。但是對于外部系統來說,很大程度上降低了他們的學習成本,他們只需要知道有facade的接口,其他的不需要知道。對于內部系統來說,隱藏了內部的模塊細節,松散耦合。 ![](https://img.kancloud.cn/94/4d/944dfec15d34e67bccc028e577dc650e_786x427.png)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看