设计模式之外观模式(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(); }}
运行结果如下:
风婆扯开皮袋,巽二郎解放口绳,风来了推云童子,布雾郎君,云雾皆来雷公奋怒,电母生嗔龙施号令,雨漫乾坤
一次降雨过程就结束了,无论是虎力大仙,还是孙悟空,都不需要关心降雨的详细过程,只需要“求雨”即可。
综上,就是一个简单的外观模式。
欢迎大家留言评论,点击查看更多设计模式。
- 设计模式之外观(Facade)模式
- 设计模式之外观模式(Facade)
- 【设计模式】之外观模式(Facade)
- 设计模式之外观模式(Facade)
- 设计模式之外观模式(Facade)
- 设计模式之外观(Facade)模式
- 设计模式之外观模式(Facade)
- 设计模式之外观模式(Facade)
- 设计模式之(Facade)外观模式
- 设计模式之外观模式(Facade)
- 设计模式之外观模式(Facade)
- 设计模式之外观模式(Facade)
- 设计模式之Facade(外观)
- 设计模式之Facade(外观)
- 设计模式之Facade (外观)
- 设计模式之Facade模式(外观模式)
- 设计模式之Facade模式(外观模式)
- 外观(Facade)设计模式
- 空间域和变换域(以傅里叶变换为例)
- ArrayList和LinkedList、Vector的区别?
- handler倒计时跳转页
- 剑指offer---替换空格(4)
- MR--Text
- 设计模式之外观模式(Facade)
- 数据结构实验之图论五:从起始点到目标点的最短步数(BFS)
- (一)Android官方MVVM框架实现组件化之整体结构
- 一个最简单的爬虫-url管理器
- 比CycleGAN更强的非监督GAN----DistanceGAN
- PL/sql Developer 卡死后 sql文件里的语句没了,如何找回原来的内容?
- LeetCode:ZigZag Conversion
- 一个最简单的爬虫-HTML下载器
- Ubuntu14.04安装caffe(cpu版)