Facade外观模式
Fa?ade模式的几个要点:
1、从客户程序的角度看,Facade模式不仅简化了整个组件系统的接口,同时对于组件内部与外部客户程序来说,从某种程度上也达到了一种“解耦”的效果——内部子系统的任何变化不会影响到Facade接口的变化。
2、Facade设计模式更注重从架构的层次去看整个系统,而不是单个类的层次。Facade很多时候更是一种架构设计模式
举个例子
我们把一个文件,放在了第二抽屉里,而第二个抽屉的钥匙放在了第一个抽屉里,我们要想取出这个文件,第一步肯定要拿到第一个抽屉的钥匙,然后打开它再拿出第二个抽屉的钥匙,最后打开第二个抽屉取出文件。(两个抽屉还好说,但如果是n个呢?)所以对于客户来说,这些取钥匙的过程不需要知道,他们只需要按一个按钮,然后文件就自动取出来。代码例子如下:
public class DrawerOne {
public void open() {
?? System.out.println("第一个抽屉被打开了");
?? getKey();
}
public void getKey() {
?? System.out.println("得到第二个抽屉的钥匙");
}
}
public class DrawerTwo {
public void open() {
?? System.out.println("第二个抽屉被打开了");
?? getFile();
}
public void getFile() {
?? System.out.println("得到这个重要文件");
}
}
//这就是外观类,对客户隐藏了所有具体细节
//client类只需要调用一个open()就完成所有操作
public class DrawerFacade {
DrawerOne darwerOne = new DrawerOne();
DrawerTwo darwerTwo = new DrawerTwo();
public void open() {
?? darwerOne.open();
?? darwerTwo.open();
}
}
public class Client {
public static void main(String[] args) {
?? DrawerFacade drawer = new DrawerFacade();
?? drawer.open();
}
}
输出结果:
第一个抽屉被打开了
得到第二个抽屉的钥匙
第二个抽屉被打开了
得到这个重要文件