一、核心作用:
- 外观模式提供一个统一的接口,用来访问系统中的一群接口,这个接口使得一群接口易于管理
- 为子系统提供一个入口,封装子系统的复杂性,便于客户调用
- 外观模式定义了一个高层的接口,让子系统更容易的使用
- 违背了开闭原则
- 符合迪米特原则(Low of Demeter 最少知道原则):一个软件实体应当尽可能少的与其他实体发生相互作用
二、常见应用场景:
1、JDBC工具类
三、代码示例:
一、子系统:
package com.hezeu.facade;
public interface 税务局 {
void taxCertificate(); //办理税务登记证
}
class 海淀税务局 implements 税务局 {
@Override
public void taxCertificate() {
System.out.println("在海淀税务局办理税务登记证!");
}
}
二、外观封装类:
package com.hezeu.facade;
/**
* @Classname RegisterFacade
* @Description TODO
* @Date 2020/2/23 下午 09:59
* @Created by 朱进博 1724282894@qq.com
*/
public class RegisterFacade {
public void register(){
工商局 a = new 海淀区工商局();
a.checkName();
质检局 b = new 海淀质检局();
b.orgCodeCertificate();
税务局 c = new 海淀税务局();
c.taxCertificate();
银行 d = new 中国工商银行();
d.openAccount();
}
}
三、测试类:
package com.hezeu.facade;
/**
* @Classname Client
* @Description TODO
* @Date 2020/2/23 下午 10:02
* @Created by 朱进博 1724282894@qq.com
*/
public class Client {
public static void main(String[] args) {
new RegisterFacade().register();
}
}
结果如下:
四、外观模式的优缺点:
优点:
引入外观模式,使客户对子系统的使用变得简单,减少了与子系统的关联对象,实现了子系统与客户之间的松耦合关系
只提供了一个访问子系统的统一接口,不应i想用户直接使用子系统类
降低了大型软件系统中的编译依赖性,简化了系统在不同平台之间的移植过程
缺点:
不能很好的限制客户使用子系统类,如果对客户访问子系统类做了太多限制则减少了可变性和灵活性
在不引入抽象外观类的情况下,增加新的子系统可能需要修改外观类或客户端原代码,违背了开闭原则