Facade模式
应用场景
一个复杂的子系统通过提供一系列的接口从而被访问 子系统相对独立——外界对子系统的访问只要黑箱操作即可
本质
优点
屏蔽了外部客户端和系统内部模块的交互 Facade的功能可以被多个客户端调用,可以实现复用(功能的共享) 提高了安全性、灵活性
缺点
角色
Facade(窗口) Facade角色是代表过程系统的许多其他角色的“简单窗口”。Facade角色向系统外部提供高层接口API。 构成系统的许多其他角色 可是完成自己的工作,他们并不知道门面角色。门面就是调用其他角色进行工作,但是其他就算不会调用门面就是。 Client(请求者) Client角色否则调用Facade角色。
Facade模式的类图
示例程序
示例程序的类图
示例代码
public class System1 {
public void method1 ( ) {
System. out. println ( "子系统方法 1" ) ;
}
}
public class System2 {
public void method2 ( ) {
System. out. println ( "子系统方法 2" ) ;
}
}
public class System3 {
public void method3 ( ) {
System. out. println ( "子系统方法 3" ) ;
}
}
public class System4 {
public void method4 ( ) {
System. out. println ( "子系统方法 4" ) ;
}
}
public class Facade {
private System1 system1;
private System2 system2;
private System3 system3;
private System4 system4;
public Facade ( ) { }
public Facade ( System1 system1, System2 system2, System3 system3, System4 system4) {
super ( ) ;
this . system1 = system1;
this . system2 = system2;
this . system3 = system3;
this . system4 = system4;
}
public void methodA ( ) {
system1. method1 ( ) ;
system2. method2 ( ) ;
}
public void methodB ( ) {
system3. method3 ( ) ;
system4. method4 ( ) ;
}
}
public class Main {
public static void main ( String[ ] args) {
Facade facade= new Facade ( ) ;
facade. methodA ( ) ;
facade. methodB ( ) ;
}
}
拓展思路
如果一个系统有好几个子系统的话,每一个子系统有一个外观类,整个系统可以有数个外观类。 在层次化结构中,可以使用Facade模式定义系统中每一层的入口点。如果子系统之间是相互依赖的,则可以让他们仅通过Facade进行通信,从而简化他们之间的依赖关系。
相关设计模式
Abstract Factory模式 可以将Abstract Factory模式,看作生成复杂实例的Facade模式。 Singleton模式 有时会使用Singleton模式创建Facade角色。
满足的原则