一、背景
如今,计算机是我们每个人最熟悉不过的了,但是启动一个计算机要经过哪些流程,可能除了计算机专业的同学,大多数普通用户不太知道,也不关心。只知道打开开机键就可以用了。试想,如果开机的内部流程让用户来操作,首先打开电源,然后启动cpu,启动内存,启动各种驱动...,这样用户是不是得疯。外观模式正是解决类似这样的问题。
二、概念
外观模式:为子系统中的一组接口提供一个一致的界面,定义一个高层接口,使得这一子系统更加容易使用。(来自百度百科定义)。我的理解是:外观模式隐藏了系统内部的复杂性(各个子系统的调用关系、顺序等等),为客户端提供一个统一调用的接口,使得客户端调用起来更为方便简洁。
三、代码示例
/**
* CPU 子系统
*
*/
class CPU {
public void startUp() {
System.out.println("cpu startUp");
}
public void shutDown() {
System.out.println("cpu shoutDown");
}
}
/**
*内存子系统
*
*/
class Memory {
public void startUp() {
System.out.println("memory startUp");
}
public void shutDown() {
System.out.println("memory shoutDown");
}
}
/**
* 计算机
* 提供给客户端调用的‘高层接口’
*/
class Computer {
private CPU cpu;
private Memory memory;
public Computer() {
cpu = new CPU();
memory = new Memory();
}
public void startUp() {
System.out.println("start the computer");
cpu.startUp();
memory.startUp();
System.out.println("start computer finished\n");
}
public void shoutDown() {
System.out.println("shoutdown the computer");
cpu.shutDown();
memory.shutDown();
System.out.println("shoutdown computer finished");
}
}
public class FacadePatternDemo {
public static void main(String agrs[]) {
Computer computer = new Computer();
computer.startUp();
computer.shoutDown();
}
}
四、总结及适用场景
1.设计阶段,考虑层与层之间建立外观模式。
2.开发阶段,子系统越来越复杂,考虑用外观模式来实现统一调用。
3.维护阶段,在维护一个大型遗留系统,而这个系统又比较难以扩展和维护,但又包含重要的功能,考虑用外观模式来建立与 新系统的交互。