1. 外观模式的定义:
外观模式,也叫作门面模式,是一种常见的封装模式,要求一个子系统外部与其内部的通信通过一个统一的对象进行。外观模式提供一个高层次的接口,使得子系统更易于使用。
外观模式注重“统一的”接口,外部只能通过这个接口来访问子系统,除了这个接口不允许单独访问子系统的行为发生。
2. 外观模式的角色说明:
--Facade门面角色
此角色知晓子系统的所有功能和责任,一般情况下,本角色会把客户端发来的请求分配到各个子系统中去,这也说明此角色并没有实际的业务逻辑,只是一个委托类。
--SubSystemClasses子系统角色
可以同时有一个或多个子系统,一个子系统不是一个单独的类,而是一个类的集合。子系统不知道门面角色类的存在,对于子系统来说,门面角色类只是另一个客户端而已。
3. 通用实例代码:
子系统类:
public class ClassA {
public void doSomethingA(){
System.out.println("do something a");
}
}
public class ClassB {
public void doSomethingB(){
System.out.println("do something b");
}
}
public class ClassC {
public void doSomethingC(){
System.out.println("do something c");
}
}
门面角色类Facade:
public class Facade {
//被委托对象
private ClassA ca;
private ClassB cb;
private ClassC cc;
public Facade() {
this.ca=new ClassA();
this.cb=new ClassB();
this.cc=new ClassC();
}
//提供给外部的访问方法
public void doSomethingA(){
this.ca.doSomethingA();
}
public void doSomethingB(){
this.cb.doSomethingB();
}
public void doSomrthingC(){
this.cc.doSomethingC();
}
}
客户端测试类:
public class Test {
public static void main(String[] args) {
Facade fd=new Facade();
fd.doSomethingA();
fd.doSomethingB();
fd.doSomrthingC();
}
}
4.外观模式的优点:
a、减少系统间的依赖,所有的以来都是对门面对象的依赖,与子系统无关
b、提高了灵活性,不管子系统内部怎么变化,只要不影响门面对象,任你自由活动
c、提高安全性,想访问子系统的那些业务就在门面类开通哪些逻辑,不在门面上开通的方法,访问不到。