一、前言

  分析完适配器模式后,接着看外观模式,外观模式很简单,可以理解为在复杂系统上封装了一层,提供了统一的接口,而让客户端只需要与该接口通信便可控制背后复杂的系统。

二、外观模式定义

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

  从定义可知,外观模式就是对一组接口的封装,提供统一的接口与客户端之间进行通信,从而达到简化使用的目的。

  其类图如下

  说明:对类图的说明如下

  ① Facade类为外观,为复杂的子系统提供了统一的接口,便于操作。

三、示例

  假设如下场景,当我们睡觉时,多么希望一键就可以关闭电视机,灯泡等电器,而不用起身一个个的关闭,这样的场景可以使用外观模式来完成,从而简化系统的使用。

  3.1 v1.0

  TV  

package com.hust.grid.leesf.facade;public class TV {public void on() {System.out.println("TV on");}public void off() {System.out.println("TV off");}
}

View Code

  Light

package com.hust.grid.leesf.facade;public class Light {public void on() {System.out.println("light is on");}public void off() {System.out.println("light off");}
}

View Code

  Facade

package com.hust.grid.leesf.facade;public class Facade {private Light light;private TV tv;public Facade(Light light, TV tv) {this.light = light;this.tv = tv;}public void on() {this.light.on();this.tv.on();}public void off() {this.light.off();this.tv.off();}
}

View Code

  Main(用作测试)

package com.hust.grid.leesf.facade;public class Main {public static void main(String[] args) {Light light = new Light();TV tv = new TV();Facade facade = new Facade(light, tv);facade.off();}
}

View Code

  运行结果

light off
TV off

  说明:使用外观模式,可以很简单的使用整个系统,一键式的就可以完成关闭的操作,有点类似之前分析的命令模式中的宏命令。

四、总结

  外观模式为复杂系统提供了一个很简单的接口,方便客户使用,同时,也允许客户直接与复杂系统进行通信,外观只是提供了一种额外的选择。所有源代码已经上传至github,欢迎fork,谢谢各位园友的观看~

  

转载于:https://www.cnblogs.com/leesf456/p/5596710.html

【设计模式】外观模式相关推荐

  1. Python设计模式-外观模式

    Python设计模式-外观模式 代码基于3.5.2,代码如下; #coding:utf-8 # 外观模式class AlarmSensor:def run(self):print("Alar ...

  2. 设计模式--------外观模式

    设计模式--------外观模式 介绍外观模式的四大问题 现在的写法有什么问题吗? 为什么要用外观模式? 什么是外观模式? 外观模式有什么好处? 使用一个例子进行问题的说明 假如要制作一个智能系统,要 ...

  3. [设计模式]外观模式

    1. 定义 外观模式 提供了一个统一的接口,用来访问子系统中的一群接口.外观定义了一个高层接口,让子系统更加容易使用. 外观不仅简化了系统内接口的使用,也将客户从组件中的子系统中解耦,外观和适配器都可 ...

  4. Java设计模式---外观模式

    外观模式(Facade) 外观模式的意图是:为子系统提供一个接口,便于它的使用. 解释: 简单的说,外观模式就是封装多个上层应用需要的方法,使得上层调用变得简单,为上层提供简单的接口,是设计模式中一种 ...

  5. Java 设计模式——外观模式

    概述 今天要说的外观模式是一个相对简单的设计模式,而且在日常的开发中,可能你也会时常使用它,只是你可能并未想过这是一个设计模式.本文会从一些实例着手,来对本文要说明的外观模式进行尽可能全面的讲解.希望 ...

  6. Java设计模式-外观模式

    我又来了,继Java设计模式之桥接模式后,现在来到了外观模式啦,外观模式又称为门面模式啦

  7. 大话设计模式—外观模式

    外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口.这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性. 这种模式涉及 ...

  8. 设计模式 外观模式 一键电影模式

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/25837275 这个模式比较简单,嘿嘿,简单写一下. 老样子,先看 外观模式(Fa ...

  9. 8. 设计模式 外观模式 一键电影模式

    这个模式比较简单,嘿嘿,简单写一下. 老样子,先看 外观模式(Facade Pattern)定义:提供一个统一的接口,用来访问子系统中的一群接口,外观定义了一个高层的接口,让子系统更容易使用.其实就是 ...

  10. 大话设计模式——外观模式

    股民炒股代码 /*** 股票1*/ public class Stock1 {// 卖股票public void sell() {System.out.println("股票1卖出" ...

最新文章

  1. mount /mnt/cdrom 提示错误信息“mount: can't find /mnt/cdrom in /etc/fstab or /etc/mtab”
  2. python 对象_python面向对象
  3. 华为交换机堆叠SVF助手(推荐)
  4. Linux系统检测命令有哪些
  5. Your WebGL implementation doesn't seem to support hardware accelerated rendering. Check your browser
  6. 第13章:项目合同管理--章节真题
  7. arrays中copyof复制两个数组_异或的魅力!图解「数组中两个数的最大异或值」
  8. 【训练过程】1) Create Training File(创建训练文件)
  9. python_day9 异常处理
  10. java 正则判断二进制_regex – 正则表达式,用于定义一些二进制序列
  11. 关于Linux下载工具
  12. 密码学专题 对称加密算法
  13. 播放.avi后缀视频报出0xc00d5212,编码格式不支持
  14. CCS 2021 | 自动化网络流量分析新方向
  15. 12-Solidity8.0-view和pure区别
  16. 将地址转化为高德经纬度坐标
  17. 第二章-用户需求分析
  18. Descending Order 实践练习
  19. mysql 1213
  20. GPU与CPU、显卡区别

热门文章

  1. 新加坡南洋理工 计算机排名6,别踩坑了!这些才是新加坡最好的专业!
  2. robotframework ie浏览器中click button不可用_RobotFramework自动化Selenium2Library库常用关键字...
  3. 微软 服务器和工具产品,微软服务器和工具部总裁鲍伯·穆格里亚辞职
  4. java编程50实例_java编程实例大全及详解谜底(50例).doc
  5. 文件格式和扩展名不匹配.文件可能已损坏_自媒体良器:音频文件批处理,FFmpeg一行搞定!果断收藏...
  6. python2升级_把Python2.6升级到Python2.7(适用于把Python2升级到Python3)
  7. ftp可以传输什么类型文件_使用FTP文件传输典型案例配置
  8. 关于当前所用的MVP架构的所思所想
  9. AI目前的根本问题——缺乏 自由意志,无法分辨真正的善恶
  10. Spark MLlib介绍