【设计模式】外观模式
一、前言
分析完适配器模式后,接着看外观模式,外观模式很简单,可以理解为在复杂系统上封装了一层,提供了统一的接口,而让客户端只需要与该接口通信便可控制背后复杂的系统。
二、外观模式定义
定义:提供了统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。
从定义可知,外观模式就是对一组接口的封装,提供统一的接口与客户端之间进行通信,从而达到简化使用的目的。
其类图如下
说明:对类图的说明如下
① 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
【设计模式】外观模式相关推荐
- Python设计模式-外观模式
Python设计模式-外观模式 代码基于3.5.2,代码如下; #coding:utf-8 # 外观模式class AlarmSensor:def run(self):print("Alar ...
- 设计模式--------外观模式
设计模式--------外观模式 介绍外观模式的四大问题 现在的写法有什么问题吗? 为什么要用外观模式? 什么是外观模式? 外观模式有什么好处? 使用一个例子进行问题的说明 假如要制作一个智能系统,要 ...
- [设计模式]外观模式
1. 定义 外观模式 提供了一个统一的接口,用来访问子系统中的一群接口.外观定义了一个高层接口,让子系统更加容易使用. 外观不仅简化了系统内接口的使用,也将客户从组件中的子系统中解耦,外观和适配器都可 ...
- Java设计模式---外观模式
外观模式(Facade) 外观模式的意图是:为子系统提供一个接口,便于它的使用. 解释: 简单的说,外观模式就是封装多个上层应用需要的方法,使得上层调用变得简单,为上层提供简单的接口,是设计模式中一种 ...
- Java 设计模式——外观模式
概述 今天要说的外观模式是一个相对简单的设计模式,而且在日常的开发中,可能你也会时常使用它,只是你可能并未想过这是一个设计模式.本文会从一些实例着手,来对本文要说明的外观模式进行尽可能全面的讲解.希望 ...
- Java设计模式-外观模式
我又来了,继Java设计模式之桥接模式后,现在来到了外观模式啦,外观模式又称为门面模式啦
- 大话设计模式—外观模式
外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口.这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性. 这种模式涉及 ...
- 设计模式 外观模式 一键电影模式
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/25837275 这个模式比较简单,嘿嘿,简单写一下. 老样子,先看 外观模式(Fa ...
- 8. 设计模式 外观模式 一键电影模式
这个模式比较简单,嘿嘿,简单写一下. 老样子,先看 外观模式(Facade Pattern)定义:提供一个统一的接口,用来访问子系统中的一群接口,外观定义了一个高层的接口,让子系统更容易使用.其实就是 ...
- 大话设计模式——外观模式
股民炒股代码 /*** 股票1*/ public class Stock1 {// 卖股票public void sell() {System.out.println("股票1卖出" ...
最新文章
- mount /mnt/cdrom 提示错误信息“mount: can't find /mnt/cdrom in /etc/fstab or /etc/mtab”
- python 对象_python面向对象
- 华为交换机堆叠SVF助手(推荐)
- Linux系统检测命令有哪些
- Your WebGL implementation doesn't seem to support hardware accelerated rendering. Check your browser
- 第13章:项目合同管理--章节真题
- arrays中copyof复制两个数组_异或的魅力!图解「数组中两个数的最大异或值」
- 【训练过程】1) Create Training File(创建训练文件)
- python_day9 异常处理
- java 正则判断二进制_regex – 正则表达式,用于定义一些二进制序列
- 关于Linux下载工具
- 密码学专题 对称加密算法
- 播放.avi后缀视频报出0xc00d5212,编码格式不支持
- CCS 2021 | 自动化网络流量分析新方向
- 12-Solidity8.0-view和pure区别
- 将地址转化为高德经纬度坐标
- 第二章-用户需求分析
- Descending Order 实践练习
- mysql 1213
- GPU与CPU、显卡区别
热门文章
- 新加坡南洋理工 计算机排名6,别踩坑了!这些才是新加坡最好的专业!
- robotframework ie浏览器中click button不可用_RobotFramework自动化Selenium2Library库常用关键字...
- 微软 服务器和工具产品,微软服务器和工具部总裁鲍伯·穆格里亚辞职
- java编程50实例_java编程实例大全及详解谜底(50例).doc
- 文件格式和扩展名不匹配.文件可能已损坏_自媒体良器:音频文件批处理,FFmpeg一行搞定!果断收藏...
- python2升级_把Python2.6升级到Python2.7(适用于把Python2升级到Python3)
- ftp可以传输什么类型文件_使用FTP文件传输典型案例配置
- 关于当前所用的MVP架构的所思所想
- AI目前的根本问题——缺乏 自由意志,无法分辨真正的善恶
- Spark MLlib介绍