首页 > 代码库 > 设计模式之外观模式
设计模式之外观模式
外观模式
外观模式核心就是为系统提供一个统一的入口,封装子系统的复杂性,便于客户端使用。
外观模式结构图
Client:客户端
Facade:外观类,提供统一的接口,根据不同的请求,调用不同的子系统处理;
Subsystem:子系统类,处理不同的子系统模块业务;
举例说明
如果我们要实现一个注册公司的模块。需要和工商局+银行+质监局+税务局打交道;
但是我们可以通过代理注册公司(外观类)去帮我们处理一系列的流程:
代码实现
(1)子系统
/** * SubSystemA 工商局 * @author yangkj*/public class SubSystemA { public void regist(String message) { System.out.println("工商局注册:" + message); }}/** * SubSystemB 银行 * @author yangkj*/class SubSystemB { public void regist(String message) { System.out.println("银行注册:" + message); }}/** * SubSystemC 质检局 * @author yangkj*/class SubSystemC { public void regist(String message) { System.out.println("质检局注册:" + message); }}/** * SubSystemD 税务局 * @author yangkj*/class SubSystemD { public void regist(String message) { System.out.println("税务局注册:" + message); }}
(2)外观类
/** * Facade 外观类 * @author yangkj*/public class Facade { public void regist(String message){ SubSystemA a = new SubSystemA(); a.regist(message); SubSystemB b = new SubSystemB(); b.regist(message); SubSystemC c = new SubSystemC(); c.regist(message); SubSystemD d = new SubSystemD(); d.regist(message); }}
(3)客户端
/** * Client * @author yangkj*/public class Client { public static void main(String[] args) { Facade facade = new Facade(); facade.regist("alibaba"); }}
(4)测试结果
使用场景
- 为一个复杂的系统提供一个简单的接口;
- 客户端和多个子系统之间存在很大的依赖性。使用外观模式,可以实现客户端和子系统之间的解耦,提高子系统的独立性和可抑制性;
外观模式优缺点
- 优点
- 外观模式使得客户端和子程序解耦,实现松耦合的关系
- 简化系统的相互依赖性,增大子系统的可移植性;
- 缺点
- 如果增加系统可能需要修改外观类或子系统的代码,违反”开闭原则“;
- 如果外观类对子程序做过多限制,减少了子系统的灵活性和可变性;
设计模式之外观模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。