今天学习servlet时候,看到ServletConfig和ServletContext都涉及到了门面模式,于是回顾一下。
门面模式(Facade Pattern):也叫外观模式,一种比较常用的封装模式.要求一个子系统的外部与其内部通信必须通过一个统一的对象进行.门面模式提供一个高层次的接口,以便子系统更易使用.
子系统可能代表一个类,也可能代表n个对象的集合.子系统并不知道门面类的存在,对子系统而言,门面仅仅是一个客户端.
门面对象是外界访问子系统内部的唯一通道,它将从客户端发来的请求委托到子系统去,该对象并没有实际的业务逻辑,只是一个委托对象.
实例代码:
//子系统A
class ClassA{
public void doSomethingA(){
System.out.println("A系统工作");
}
}
//子系统C
class ClassB{
public void doSomethingB(){
System.out.println("B系统工作");
}
}
//子系统C
class ClassC{
public void doSomethingC(){
System.out.println("C系统工作");
}
}
//门面类
public class Facade {
private ClassA a = new ClassA();
private ClassB b = new ClassB();
private ClassC c = new ClassC();
public void methodA(){
a.doSomethingA();
}
public void methodB(){
b.doSomethingB();
}
public void methodC(){
c.doSomethingC();
}
public static void main(String[] args){
Facade f =new Facade();
f.methodA();
f.methodB();
f.methodC();
}
}
被封装的子系统对象通常被设为private或protected,以防止在Facade中被直接访问。例如上述代码中的ClassA,ClassB,ClassC的修饰符都是private。
注意:门面对象不应该参与业务逻辑,门面对象应该是稳定的。业务逻辑的变化应该封装到子系统中去,我们可以扩充子系统。