门面模式

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

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、子系统相对独立,外界对子系统的访问黑箱操作集合
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在阎宏博士的《JAVA与模式》一书中开头是这样描述门面(Facade)模式的: 门面模式(外观模式)是对象的结构模...
    聂叼叼阅读 1,579评论 0 1
  • 定义 门面模式是对象的结构模式,外部与一个子系统的通信必须通过一个统一的门面对象进行。门面模式提供一个高层次的接口...
    步积阅读 6,630评论 0 3
  • 1 门面模式的定义 门面模式:Facade Pattern,也叫做外观模式。要求一个子系统的外部与其内部的通信必须...
    Jerry_1116阅读 5,090评论 0 0
  • 一:门面模式的定义 外观模式的目的不是给予子系统添加新的功能接口,而是为了让外部减少与子系统内多个模块的交互,松散...
    时待吾阅读 4,371评论 0 0
  • 「我的童年曾在这里,消散在这栋满是回忆的屋子里,回忆里有着关于妈妈、关于我们一起生活过的点点滴滴。」 看到这段话,...
    精致的zhuzhu女孩阅读 1,586评论 0 0