一、门面模式定义
- 定义:又叫门面模式,提供了一个统一的接口,用来访问子系统中的一群接口
- 外观模式定义了一个高层接口,让子系统更容易使用
- 类型:结构型
- UML类图
门面模式是对系统复杂的关系处理做了一个封装,对外提供一个简单的接口,成员介绍:
子系统:被门面模式封装的子系统,也是具体业务逻辑的细节
facade类:门面类,对子系统执行流程进行封装,对外开放功能接口,一般为单例对象。
二、门面模式实例
门面模式主要包含2种角色:
**外观角色(Facade):**也称门面角色,系统对外的统一接口;
**子系统角色(SubSystem):**可以同时有一个或多个 SubSystem。每个 SubSytem 都不是一个单独
的类,而是一个类的集合。 SubSystem 并不知道 Facade 的存在,对于 SubSystem 而言, Facade 只
是另一个客户端而已(即 Facade 对 SubSystem 透明)。
下面是门面模式的通用代码,首先分别创建3个子系统的业务逻辑SubSystemA、SubSystemB、
SubSystemC,代码很简单:
来看客户端代码:
// 外观角色 Facade public class Facade { private SubSystemA a = new SubSystemA(); private SubSystemB b = new SubSystemB(); private SubSystemC c = new SubSystemC(); // 对外接口 public void doA() { this.a.doA(); } // 对外接口 public void doB() { this.b.doB(); } // 对外接口 public void doC() { this.c.doC(); } }
三、门面模式的优缺点
优点:
1、简化了调用过程,无需深入了解子系统,以防给子系统带来风险
2、减少系统依赖、松散耦合
3、更好地划分访问层次,提高了安全性
4、遵循迪米特法则,即最少知道原则。
缺点:
1、当增加子系统和扩展子系统行为时,可能容易带来位置风险
2、不符合开闭原则
3、某些情况下可能违背的单一职责原则
四、门面模式在实际中的应用
例如:前端ReseFul请求——>Controll ->Dao->Service
五、装饰器模式介绍
装饰器模式在我们生活中应用也比较多如给煎饼加鸡蛋;给蛋糕加上一些水果;给房子装修等,为对象扩展一些额外的职责。装饰器在代码程序中适用于以下场景:
1、用于扩展一个类的功能或给一个类添加附加职责。
2、动态的给一个对象添加功能,这些功能可以再动态的撤销。
3、需要为一批的兄弟类进行改装或加装功能。