概述
外观模式又名门面模式
- 定义:为子系统中的一组接口提供一个一致的界面,定义一个高层接口,这个接口使得这一子系统更加容易使用
- 适用场景:
- 设计初期阶段,应该有意识的将不同层分离,层与层之间建立外观模式
- 开发阶段,子系统越来越复杂,增加外观模式提供一个简单的调用接口
- 维护一个大型遗留系统的时候,可能这个系统已经非常难以维护和扩展,但又包含非常重要的功能,为其开发一个外观类,以便新系统与其交互
实现
// 子系统,包含A、B、C三个模块
public class ModuleA {
public void a() {
System.out.println("a");
}
}
class ModuleB {
public void b() {
System.out.println("b");
}
}
class ModuleC {
public void c() {
System.out.println("c");
}
}
// Facade
public class Facade {
private ModuleA a;
private ModuleB b;
private ModuleC c;
public Facade() {
a = new ModuleA();
b = new ModuleB();
c = new ModuleC();
}
public void test() {
a.a();
b.b();
c.c();
}
}
// 客户端
public class Client {
public static void main(String[] args) throws Exception {
Facade facade = new Facade();
facade.test();
}
}
通过外观模式松散了客户端与子系统的耦合关系,让子系统内部的模块能更容易扩展和维护
实际应用
java.util.logging
通过外观模式,使客户端仅通过下面简单的代码即可实现日志输出,为客户端提供了简单、统一的接口,降低了耦合性
Logger log = Logger.getLogger("log");
log.info("message");