外观模式,要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行交互。故此会要求提供一个高层次的接口使得子系统更易于使用。
相关角色
1、外观(Facade)角色,客户端调用这个对象的方法,此角色知晓相关子系统的功能与职责。通过此对象的方法可以完成子系统中一系列的操作。
2、子系统角色:可以同时包含一个或多个子系统。每个子系统都不是一个单独的类,而是一些类的集合。每个子系统都可以被客户端直接调用,或者被外观角色调用。
适用情况
1. 为复杂的子系统提供一个简单的接口;
2. 客户程序与多个抽象类的实现部分之间存在着很大的依赖性;
3. 构建一个层次结构的子系统时,适用采用外观模式定义子系统中每层的入口。
【转载使用,请注明出处:http://blog.csdn.net/mahoking】
演示案例
本例以煤气灶(Gas Cooker)的启动过程为例,打开(open)煤气灶时,供气(Gas)、点火(Flint),接下来开始做饭(cooke)吧!
public class Gas {
/**
* 供气操作
*/
public void supplyGas() {
System.out.println("供气系统供气。。。。。。");
}
}
public class Flint {
/**
* 点火操作
*/
public void ignite() {
System.out.println("点火系统点火。。。。。。");
}
}
public class GasCooker {
private static Gas gas = null;
private static Flint flint = null;
static{
gas = new Gas();
flint = new Flint();
}
/**
* 打开煤气灶
*/
public void open() {
gas.supplyGas();
flint.ignite();
System.out.println("####开始做饭吧!####");
}
}
public class Client {
public static void main(String[] args) {
GasCooker gasCooker = new GasCooker();
gasCooker.open();
}
}
拓展对比
1. 当需要使用一个现有的类的接口不符合需要时,需要使用适配器模式;
2. 当需要简化一系列或复杂的接口调用时,需要使用外观模式;
3. 适配器模式改变接口以符合功能的需求;
4. 外观模式将客户从一些复杂的子系统中解耦;
5. 适配器模式将一个对象包装起来以改变其接口;装饰模式将一个对象包装起来以加上新的行为与职责;而外观模式将一系列子系统包含的对象整合在一个对象内以简化其接口。
【转载使用,请注明出处:http://blog.csdn.net/mahoking】
参考资料
1、 http://blog.csdn.net/cai1213/article/details/8001228
2、 http://liyf155.iteye.com/blog/1189789
3、 http://wy1178037136.blog.163.com/blog/static/1844941972012101433048828/
原文:http://blog.csdn.net/mahoking/article/details/41683951