文章目录
- 前言
- 一、介绍
- 二、特点
- 三、详细分析
- 1.核心组成
- 2.代码示例
- 3.优缺点
- 优点
- 缺点
- 4.使用场景
- 总结
前言
外观模式是结构型设计模式,定义一个高层接口,用来访问子系统中的众多接口,使系统更加容易使用。
一、介绍
外观设计模式(Facade Pattern)是一种常用的设计模式,属于结构型模式之一。它提供了一个统一的接口来访问一个子系统中的一组接口,从而隐藏子系统的复杂性,让子系统更容易使用。
二、特点
- 简化接口:为复杂的子系统提供一个简化的方法来访问它的功能。
- 隐藏复杂性:隐藏子系统内部的复杂逻辑和实现细节,客户端不需要了解内部的复杂结构。
- 子系统独立性:Facade 不会强制子系统进行修改以符合新的接口,它们可以独立地变化和发展。
- 灵活性:通过引入 Facade,可以很容易地添加或修改子系统的功能,同时保持客户端代码的稳定性。
- 松耦合:Facade 模式降低了客户端与复杂子系统之间的耦合度。
三、详细分析
1.核心组成
外观角色(Facade):客户端可以调用这个角色的方法, 这个外观方法知道多个子系统的功能和实际调用。
子系统角色(SubSystem):每个子系统都可以被客户端 直接调用,子系统并不不知道门面的存在。
2.代码示例
外观角色抽象接口类
/*** 外观角色抽象类*/
public interface LoginSDK {void login();
}
外观角色实现类
/*** 外观角色实现类*/
public class LoginImpl implements LoginSDK {/*** 日志服务*/private LogService logService = new LogService();/*** 用户服务*/private UserService userService = new UserService();/*** 短信服务*/private SmsService smsService = new SmsService();@Overridepublic void login() {System.out.println("用户登录成功");logService.log();userService.userInfo();smsService.sendMessage();}}
子系统角色
/*** 日志子系统*/
public class LogService {public void log(){System.out.println("记录操作日志");}}
/*** 短信子系统*/
public class SmsService {public void sendMessage(){System.out.println("发送消息提醒!");}}
/*** 用户子系统*/
public class UserService {public void userInfo(){System.out.println("查询用户权限等相关信息");}}
外观设计模式测试类
/*** 测试类*/
public class FacadeTest {public static void main(String[] args) {LoginSDK loginSDK = new LoginImpl();loginSDK.login();}}
结果
3.优缺点
优点
-
减少系统相互依赖,提高灵活性。
-
符合迪米特法则,一个实体应当尽可能的少与其他实体之间发生相互作用。
缺点
- 增加系统调用链路。
4.使用场景
- 当需要向客户端提供一个简单接口来访问复杂系统中的一组操作时。
- 当需要为复杂的类层次结构提供一个简单接口时。
- 当需要通过一个中间层来简化客户端与复杂系统的交互时。
总结
外观设计模式在实际开发中非常有用,特别是在处理大型复杂系统时,它可以帮助我们简化客户端的交互过程,提高系统的可维护性和可扩展性。