门面模式

门面模式也叫作外观模式,是一种比较常用的封装模式,定义如下:

Provide a unified interface to a set of interfaces in a subsystem.Facade defines a higher-level interface that makes the subsystem easier to user.

对子系统的一系列接口提供一个统一的接口,该接口就是门面。门面定义了一个一个更高层次的接口,对用户来说使用子系统的更加加单。

门面模式的通用类图如下:


13.png

类图很简单,但是代表的意义却异常复杂,Subsystem classes是子系统所有类的统称,可能代表一个类,也可能代表十几个类,甚至代表多个Substem。也就是所不管是一个子系统还是多个子系统,不管子系统内部依赖多复杂,对外不的用户来说,都不用关心,并且都不可见,用户只能访问facade,由facade来对内部访问进行访问。但是需要注意的是:facade一定不能涉及业务逻辑。比如对方法的调用顺序的判断等。

结构示意图如下:


14.png

各角色定义如下:

Facade:门面角色,客户端可以调用这个角色的方法。此角色知晓子系统的所有功能和责任。一般情况下本角色将所有从客户端发来的请求委派到相应的子系统中去,并没有具体的业务逻辑。

Subsystem 子系统角色:可同时拥有一个或者多个子系统,每个子系统都不是一个单独的类,而是一个集合。子系统并不知道门面了ide存在。对于子系统而言,门面类仅仅是一个客户端而言。

门面模式的优点:

1、减少系统间的相互依赖:如果不使用门面模式,那么外部直接访问子系统内部,就是直接依赖子系统的类,形成强耦合。而使用了门面模式,客户端就只与门面类Facade一个类依赖。

2、提高了灵活性:减少了依赖,灵活性自然就提高了,子系统内部不管如何变化,只要不影响门面类,那么久任你改变。

3、提高了安全性:封装了子系统的方法,有门面类来控制,门面类告诉你哪些方法你就能访问哪些,而不是所有的子系统的方法。

门面模式的缺点:

1、不符合开闭原则,有改动只能修改门面类,而不能使用继承、覆写等方式。

门面类的使用场景:

1、为一个复杂的模块或子系统提供一个外界访问的接口

2、子系统相对独立,外界对子系统的访问黑箱操作集合

你可能感兴趣的:(门面模式)