外观模式:为子系统中的一组接口提供一个统一接口。外观模式定义了一个更高层的接口,使子系统更加容易使用。
外观模式,是一种结构型模式,它主要解决的问题是:组件的客户和组件中各种复杂的子系统有了过多的耦合,随着外部客户程序和各子系统的演化,这种过多的耦合面临很多变化的挑战。
举个例子
我们把一个文件,放在了第二抽屉里,而第二个抽屉的钥匙放在了第一个抽屉里,我们要想取出这个文件,第一步肯定要拿到第一个抽屉的钥匙,然后打开它再拿出第二个抽屉的钥匙,最后打开第二个抽屉取出文件。(两个抽屉还好说,但如果是n个呢?)所以对于客户来说,这些取钥匙的过程不需要知道,他们只需要按一个按钮,然后文件就自动取出来。代码例子如下:
1、
public class DrawerOne { public void open() { System.out.println("第一个抽屉被打开了"); getKey(); } public void getKey() { System.out.println("得到第二个抽屉的钥匙"); } }
2、
public class DrawerTwo { public void open() { System.out.println("第二个抽屉被打开了"); getFile(); } public void getFile() { System.out.println("得到这个重要文件"); } }
3、
//这就是外观类,对客户隐藏了所有具体细节 //client类只需要调用一个open()就完成所有操作 public class DrawerFacade { DrawerOne darwerOne = new DrawerOne(); DrawerTwo darwerTwo = new DrawerTwo(); public void open() { darwerOne.open(); darwerTwo.open(); } }
4、
public class Client { public static void main(String[] args) { DrawerFacade drawer = new DrawerFacade(); drawer.open(); } }
输出结果:
第一个抽屉被打开了
得到第二个抽屉的钥匙
第二个抽屉被打开了
得到这个重要文件