一、门面模式
门面模式:提供统一接口访问子系统接口
1、包含角色
外观 | 系统对外的统一接口 |
子系统 | 类的集合;并不知道外观角色的存在,需要为了配合外观角色而做特殊处理或修改 |
2、举例
原本开关灯要分别操作各个房间的灯,现在设置总开关更方便。在代码中定义Light接口规定开关灯方法,DiningLight、HallLight、LivingRoomLight类实现该接口,各自实现开关灯具体操作。LightFacade类作为总开关一样的外观类,持有这三种灯的实例,用lightOn()和lightOff()方法就能一键统一控制所有灯的开关。
3、优点
- 减少系统依赖,降低客户端和子系统耦合;
- 提高灵活性,简化客户端使用;
- 可灵活设定访问权限,提高安全性
二、适配器模式
适配器模式就是将一个类的接口转换成客户期望的另一个接口,使原本接口不兼容的类能协作,简单来说就是包装目标类使之适配调用方使用。
三、二者区别
门面模式是为子系统提供一个统一的高层接口,隐藏子系统的复杂性,让子系统更易于使用,就像设置总开关统一开关各个房间的灯
在SLF4J中的体现:SLF4J定义统一日志API,如info()等,调用者只需用这些API,而无需了解底层Log4j、Logback等,隐藏了日志框架的复杂性,类似门面为子系统提供简单接口
适配器模式主要用于将不兼容的接口转化为可兼容的接口,使原本无法一起工作的类能够协作工作,就像电源适配器将不同插头适配到插座上
在SLF4J中的体现:SLF4J需适配不同日志框架,将自身API调用转为对应框架能理解的应用,像适配器转换接口让不同对象协同工作,不过适配较隐蔽