门面模式
Posted fightingtong
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了门面模式相关的知识,希望对你有一定的参考价值。
门面模式:Facade Pattern, FP
又叫外观模式,提供了一个统一的接口,用来访问子系统中的一群接口
特征:定义一个高层接口,让子系统更容易使用
属于结构型模式
日常编码中,有意无意的大量使用了门面模式,但凡只要高层模块需要调度多个子系统(2个以上类对象),我们都会自觉的创建一个新类封装这些子系统,提供精简接口,让高层模块可以更加容易的间接调用这些子系统的功能。
尤其是现阶段各种第三方 SDK, 各种开源类库,很大概率都会使用门面模式
应用场景:
子系统越来越复杂,增加门面模式提供简单接口
构建多层系统结构,利用门面对象作为每层的入口,简化层间调用
门面模式主要包含2种角色:
外观角色:(Facade)也称 门面角色,系统对外的统一接口
子系统角色:(SubSystem)可以同时有一个或多个 SubSystem,每个SubSystem都不是一个单独的类,而是一个类的集合。
SubSystem 并不知道 Facade 的存在,对 SubSystem 而言,Facade 只是另一个客户端
通用写法:
pattern.facade.general
业务实例:
Gper社区新增上线一个积分兑换礼品的商城
面向对接各个子系统,可能涉及到 积分系统、支付系统、物流系统的接口调用
如果全部由前端发送网络请求现有接口:
1、增加前端开发的难度
2、增加一些网络请求影响页面性能
发挥门面模式的优势,将现有的接口整合到一个类中,由后端提供统一的接口给前端调用
pattern.facade.points
源码中的体现:
Spring: JDBC模块下的 JdbcUtils 类
MyBatis:Configuration 类
Tomcat: RequestFacade 类、ResponseFacade 类、StandardSessionFacade 类
门面模式与代理模式
门面模式就是特殊的静态代理模式
门面模式:重点是在于封装
静态代理:重点是在于增强
不做增强的静态代理就是门面模式
(以后会讲委派模式,也是一种静态代理)
代理:结构型模式
委派:行为型模式,不属于 GOF 23 ?
门面模式与单例模式
门面模式做成单例,比如:工具包
static就是单例,只不过内存放在代码块中,不是存在堆内存,
优点:
简化调用过程,无需深入了解子系统x具体实现,以防给子系统带来风险
减少系统依赖、松散耦合
更好地划分访问层次,提高了安全性
遵循迪米特法则(最少知道原则)
缺点:
当增加子系统和扩展子系统行为时,可能容易带来未知风险
不符合开闭原则
某些情况下可能违背了单一职责原则
作业:
1、请举例3-5个使用门面模式的应用场景。
/homework/tasks/7e7e7f7ff7g5egc4g6agf0
以上是关于门面模式的主要内容,如果未能解决你的问题,请参考以下文章