外观模式

外观模式

一、概念

外观模式的主要目的在于让外部减少与子系统内部多个模块的交互,从而让外部能够更简单得使用子系统。它负责把客户端的请求转发给子系统内部的各个模块进行处理。
主要负责组合已有功能来实现客户端请求,不会添加新功能的实现。

二、使用场景

  • 要为一个复杂子系统提供一个简单接口时。
  • 客户程序与抽象类的实现部分之间存在着很大的依赖性
  • 需要构建一个层次结构的子系统时。

三、UML结构

外观模式UML.png

四、代码示例

ModuleA:

public class ModuleA {
    
    public void testFuncA(){
        System.out.println("This is Function From ModuleA");
    }

}

ModuleB:

public class ModuleB {

    public void testFuncB(){
        System.out.println("This is Function From ModuleB");
    }
}

ModuleC:

public class ModuleC {

    public void testFuncC(){
        System.out.println("This is Function From ModuleC");
    }
}

Facade:

public class Facade {
    
    private ModuleA moduleA = null;
    private ModuleB moduleB = null;
    private ModuleC moduleC = null;
    
    //为了让整个系统只有一个外观类,使用单例,并将其他方法声明为静态方法。
    private static Facade facade = null;
    
    private Facade(){
        moduleA = new ModuleA();
        moduleB = new ModuleB();
        moduleC = new ModuleC();
    }
    
    public static Facade getInstance(){
        if(facade == null){
            facade = new Facade();
        }
        return facade;
    }
    
    public void testOperation(){
        moduleA.testFuncA();
        moduleB.testFuncB();
        moduleC.testFuncC();
    }

}

Client:

public class Client {
    
    public static void main(String[] args) {
        //不管内部发生了什么变化,客户端是不需要改变的
        Facade.getInstance().testOperation();
        /**
         * This is Function From ModuleA
            This is Function From ModuleB
            This is Function From ModuleC
         */
    }

}

五、外观模式的优点

  • 由于Facade类封装了各个模块交互的过程,如果今后内部模块调用关系发生了变化,只需要修改Facade实现就可以了
  • Facade实现是可以被多个客户端调用的。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容