设计模式-外观模式(Facade Pattern)

本文由@呆代待殆原创,转载请注明出处:http://www.cnblogs.com/coffeeSS/

 

外观模式简介

外观模式的作用用一句话说就是简化接口,举个例子楼主每次编程的时候都要点开IDE、点开一本电子书、点开音乐播放器、点开QQ,非常的麻烦,如果能有一个一键打开这些所有东西的功能键是不是会很好?这就是外观模式所做的事情。

 

外观模式的定义和基本结构

定义:外观模式为一个接口众多的子系统提供一个统一的高层接口,使这个子系统更加容易使用。

来自《Head First》里的一张结构图

subsystem classes:代表一堆子系统中杂乱的接口。

Facade:外观模式提供的高层次接口。

client:客户端,通过Facade这个简单的接口来使用这个复杂的子系统。

 

一个简单的实例(java)

我们继续简介中的例子,我们假设操作系统就是我们的复杂的子系统,里面的软件形成了一个个可供使用的接口,楼主要开始编程要依次调用IDE,电子书阅读器,音乐播放器,QQ这四个软件使用接口中的open方法,如果我们提供一个高层次的接口里面运用组合包含这四个软件的示例,并提供一个startCoding()方法,那么楼主以后就不用一个一个调用,只用调用一个方法就好,这就是用高层接口简化了使用,是不是特别的简单呢~下面给出代码实现,给出IDE,EBook,MusicPlayer,QQ四个类,然后提供一个simpleFacade类来简化这四个类的使用。

四个软件类代码如下

 1 public class IDE {
 2     public void open(){
 3         System.out.println("open IDE");
 4     }
 5 }
 6 public class EBook {
 7     public void open(){
 8         System.out.println("open EBook");
 9     }
10 }
11 public class MusicPlayer {
12     public void open(){
13         System.out.println("open MusicPlayer");
14     }
15 }
16 public class QQ {
17     public void open(){
18         System.out.println("open QQ");
19     }
20 }

 

SimpleFacade类的代码

 1 public class SimpleFacade {
 2     private IDE ide;
 3     private EBook ebook;
 4     private MusicPlayer mp;
 5     private QQ qq;
 6     public SimpleFacade(IDE ide,
 7                         EBook ebook,
 8                         MusicPlayer mp,
 9                         QQ qq){
10         this.ide=ide;
11         this.ebook=ebook;
12         this.mp=mp;
13         this.qq=qq;
14     }
15     public void startCoding(){
16         ide.open();
17         ebook.open();
18         mp.open();
19         qq.open();
20         System.out.println("Let's start coding");
21     }
22 }

 

测试代码如下

1 public class Test {
2     public static void main(String[] args) {
3         SimpleFacade sf = new SimpleFacade(new IDE(), 
4                                            new EBook(),
5                                            new MusicPlayer(), 
6                                            new QQ());
7         sf.startCoding();
8     }
9 }

 

输出如下:

 

外观模式和适配器模式的区别

两者都用到了包装这一方法,但是目的完全不一样.

适配器模式的目的是为了改变接口,把任意接口改变成我们需要的接口,重点在改变

外观模式的目的是为了简化接口,方便人们的使用                           ,重点在简化

 

外观模式到此结束♪(^∇^*)。

 

参考资料:《Head First 设计模式》。

 

posted @ 2016-07-19 21:27  呆代待殆  阅读(283)  评论(0编辑  收藏  举报