23种设计模式之外观模式(门面模式)

一.概念:

外观模式(Facade),为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

应用场景#
解决易用性问题,可以用来封装系统的底层实现,隐藏系统的复杂性,提供一组更加简单易用、更高层的接口。
解决性能问题,通过将多个接口调用替换为一个门面接口调用,减少网络通信成本,提高 App 客户端的响应速度。API 聚合就是属于这种,也是属于外观模式的应用
解决事务问题,通过门面模式可以方便的使得原本多个操作可以在一个事务内完成,如果中间某一个环节操作失败,可以回滚事务,撤销变更。

二:

Facade: 外观类,知道哪些子系统类负责处理请求,将请求代理给对应的子系统对象

SubSystem Classes,实现子系统中的功能,处理 Facade 指派的任务,和 Facade 没有关联关系,没有继承,也不会引用 Facade

public class SubSystem1 {
    public void MethodA()
    {
        System.out.println("MethodA in SubSystem1");
    }
    public void MethodB()
    {
        System.out.println("MethodB in SubSystem1");
    }
}

public class SubSystem2 {
    public void MethodA()
    {
        System.out.println("MethodA in SubSystem2");
    }

    public void MethodB()
    {
        System.out.println("MethodB in SubSystem2");
    }
}

public class SubSystem3 {
    public void MethodA()
    {
        System.out.println("MethodA in SubSystem3");
    }

    public void MethodB()
    {
        System.out.println("MethodB in SubSystem3");
    }
}

public class Facade {
    private  SubSystem1 _subSystem1 = new SubSystem1();
    private  SubSystem2 _subSystem2 = new SubSystem2();
    private  SubSystem3 _subSystem3 = new SubSystem3();

    public void MethodA()
    {
        _subSystem1.MethodA();
        _subSystem2.MethodA();
        _subSystem3.MethodA();
        
    }

    public void MethodB()
    {
        _subSystem1.MethodB();
        _subSystem2.MethodB();
        _subSystem3.MethodB();
        
    }

}

测试:

1 public class main {
2     public static void main(String arges[]) {
3         Facade facade=new Facade();
4         facade.MethodA();
5         facade.MethodB();
6         
7     }

MethodA in SubSystem1
MethodA in SubSystem2
MethodA in SubSystem3
MethodB in SubSystem1
MethodB in SubSystem2
MethodB in SubSystem3

原文地址:https://www.cnblogs.com/HYV587/p/13407984.html