概述

根据单一职责原则,在一个软件中将一个系统划分为若干个子系统有利于降低整个系统的复杂性,一个常见的设计目标是使客户类与子系统之间的通信和相互依赖关系达到最小,而达到该目标的方法之一就是引入一个外观角色(Facade),它为子系统的访问提供了一个简单而单一的入口,外观模式也是迪米特法则的体现,通过引入一个新的外观角色可以降低原有系统的复杂度,同时降低客户类与子系统类的耦合度。
外观模式要求一个子系统的外部与其内部的通信通过一个统一的外观角色进行,外观角色将客户端与子系统内部复杂性隔开,使得客户端只需要与外观角色打交道。

子系统:在外观模式中的子系统是一个广义的概念,它可以使一个类,一个功能模块、系统的一个组成部分或一个完整的系统。

定义

Facade Pattern:外部客户端与一个子系统的通信通过一个统一的外观角色进行,为子系统的一组接口提供一个一致的接口,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用,外观模式又被称为门面模式,它是一种对象结构型模式。


UML示例

外观模式


代码示例

public class SubSystemClassA {
    public void methodA(){
        System.out.println("运行方法A");
    }
}

public class SubSystemClassB {
    public void methodB(){
        System.out.println("运行方法B");
    }
}

public class SubSystemClassC {
    public void methodC(){
        System.out.println("运行方法C");
    }
}

// 外观类
public class Facade {
    private SubSystemClassA obj1 = new SubSystemClassA();
    private SubSystemClassB obj2 = new SubSystemClassB();
    private SubSystemClassC obj3 = new SubSystemClassC();

    public void methodAll(){
        obj1.methodA();
        obj2.methodB();
        obj3.methodC();
    }
}

public class Client {
    public static void main(String[] args) {
        Facade a = new Facade();

        a.methodAll();
    }
}

输出

运行方法A
运行方法B
运行方法C
最后修改:2020 年 05 月 24 日
如果觉得我的文章对你有用,请随意赞赏