设计模式之外观模式(Facade)

来源:互联网 发布:机器人聊天软件 编辑:程序博客网 时间:2024/05/17 04:37

外观模式:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一系统更加容易使用。

一、外观模式

外观模式(Facade)属于结构型设计模式,它隐藏了系统的复杂性,并向客户端提供了一个可以访问系统的接口。其UML图如下:

这里写图片描述

外观模式由下面模式组成:

外观角色(Facade):是模式的核心,被客户client角色调用,知道各个子系统的功能。同时根据客户角色已有的需求,预订功能组合。

子系统角色(Subsystem classes):实现子系统的功能,处理Facade对象指派的任务。对子系统而言,没有Facade的任何相关信息,没有指向Facade的实例。

客户角色(client):调用facade角色获得完成相应的功能。

二、案例分析

在《西游记》中,降雨这事,皆是天机,可谓“天机不可泄露”,降雨是要天上雨部、雷部、云部、风部四部合力,才能普降甘雨,救济黎民。在第四十五回《三清观大圣留名 车迟国猴王显法》中,孙悟空和虎力大仙斗法求雨,描述如下:

那大仙走进去,更不谦逊,直上高台立定。旁边有个小道士,捧了几张黄纸书就的符字,一口宝剑,递与大仙。大仙执着宝剑,念声咒语,将一道符在烛上烧了。那底下两三个道士,拿过一个执符的象生,一道文书,亦点火焚之。那上面乒的一声令牌响,只见那半空里,悠悠的风色飘来….
……
天君道:“那道士五雷法是个真的。他发了文书,烧了文檄,惊动玉帝,玉帝掷下旨意,径至九天应元雷声普化天尊府下。我等奉旨前来,助雷电下雨。”

这样看来,虎力大仙根本不知道降雨的流程。他只是发了文书,烧了文檄,就能求雨成功。这里就隐含着外观模式。我们把降雨的四个步骤,作为子系统中的类,完整的一次降雨过程,作为Facade的一个方法, 其UML图如下:

这里写图片描述

代码如下:

四个下雨的步骤:

SubSystemA–刮风

class SubSystemA{  public void wind(){     System.out.println("风婆扯开皮袋,巽二郎解放口绳,风来了");  }}

SubSystemB–起雾

class SubSystemB{  public void cloud(){     System.out.println("推云童子,布雾郎君,云雾皆来");  }}

SubSystemC–雷鸣

class SubSystemC{  public void laghtning(){     System.out.println("雷公奋怒,电母生嗔");  }}

SubSystemC–下雨

class SubSystemD{  public void rain(){     System.out.println("龙施号令,雨漫乾坤");  }}

Facade 类

class Facade{ SubSystemA one; SubSystemB two; SubSystemC three; SubSystemD four; pubiic Facade(){  one = new SubSystemA();  two= new SubSystemB();  three= new SubSystemC();  four= new SubSystemD(); } public void rainPrecess(){    one.wind();    two.cloud();    three.laghtning();    four.rain();  }}

故事上演:

public class Story{      public static void main(String[] args) {      Facade facade = new Facade ();     facade.rainProcess();     }}

运行结果如下:

风婆扯开皮袋,巽二郎解放口绳,风来了推云童子,布雾郎君,云雾皆来雷公奋怒,电母生嗔龙施号令,雨漫乾坤

一次降雨过程就结束了,无论是虎力大仙,还是孙悟空,都不需要关心降雨的详细过程,只需要“求雨”即可。

综上,就是一个简单的外观模式。

欢迎大家留言评论,点击查看更多设计模式。