设计模式系列八 外观模式介绍

一、认识外观模式

我们现在要看一个改变接口的新模式,但是它改变接口的原因是为了简化接口。这个模式被巧妙地命名为外观模式(Facade-Pattern),之所以这么称呼,是因为它将一个或数个类的复杂的一切都隐藏在背后,只显露出一个干净美好的外观。

二、例子

建立自己的家庭影院。通过一番研究比较,你组装了一套杀手级的系统,内含DVD播放器、投影机、自动屏幕、环绕立体声,甚至还有爆米花机。

1、观赏电影(用最困难的方式)

挑选一部DVD影片,放松,准备开始感受电影的魔幻魅力。哎呀!忘了一件事:想看电影,必须先执行一些任务。图01.jpg

设计模式系列八 外观模式介绍_第1张图片

让我们将这些任务写成类和方法的调用。图02.jpg

设计模式系列八 外观模式介绍_第2张图片

但还只是这样……

看完电影后,你还要把一切都关掉,怎么办?难道要反向地把这一切动作再进行一次?

如果要听CD或者广播,难道也会这么麻烦?

如果你决定要升级你的系统,可能还必须重新学习一套稍微不同的操作过程。

怎么办?使用你的家庭影院变得如此复杂!让我们看看外观模式如何解决这团混乱,好让你能轻易地享受电影……

2、构造家庭影院外观

让我们逐步构造家庭影院外观:第一步是使用组合让外观能够访问子系统中所有的组件。图03.jpg

设计模式系列八 外观模式介绍_第3张图片

3、实现简化的接口

现在该是时候将子系统的组件整合成一个统一的接口了。让我们实现watchMovie()和endMovice()两个方法:图04.jpg

设计模式系列八 外观模式介绍_第4张图片

4、观赏电影(用轻松的方式)

这是大显身手的时刻。图05.jpg

设计模式系列八 外观模式介绍_第5张图片

三、定义外观模式

想要使用外观模式,我们创建了一个接口简化而统一的类,用来包装子系统中一个或者多个复杂的类。外观模式相当直接,很容易理解,这方面和许多其他的模式不太一样。但这并不会降低它的威力:外观模式允许我们让客户和子系统之间避免紧耦合。

外观模式 提供了一个统一接口,用来访问子系统中的以群接口。外观定义了一个高层接口,让子系统更容易使用。

这很容易理解,但是请务必记得模式的意图。这个定义清楚地告诉我们,外观的意图是要提供一个简单的接口,好让一个子系统更易于使用。从这个模式的类图可以看出这点:图06.jpg

设计模式系列八 外观模式介绍_第6张图片

四、回顾要点

1、当需要简化并统一一个很大的接口或者一群复杂的接口时,使用外观。

2、外观将客户从一个复杂的子系统中解耦。

3、实现一个外观,需要将子系统组合进外观中,然后将工作委托给子系统执行。

4、你可以为一个子系统实现一个以上的外观。

5、适配器将一个对象包装起来以改变其接口;装饰者将一个对象包装起来以增加新的行为和责任;而外观将一群对象”包装“起来以简化其接口。

你可能感兴趣的:(外观模式)