Java设计模式 - 外观模式

不断学习才是王道

继续踏上学习之路,学之分享笔记

总有一天我也能像各位大佬一样

原创作品,更多关注我CSDN: 一个有梦有戏的人

准备将博客园、CSDN一起记录分享自己的学习心得!!!

分享学习心得,欢迎指正,大家一起学习成长!

简介

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

这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。

                                                                                                                                                    ———— 菜鸟联盟

外观模式之理解

对于外观模式,我们可以理解为他是将一些复杂的接口或类进行隐藏,自己暴露出更为简单的操作方法,使得以我们不需要去对复杂方法的操作。就比如要完成一道工序,工序又有许多步骤,在不同情况要使用不同工序的方法,如果是传统的方式,一个一个调用,那么到一定量就会显得调用的复杂并且维护起来困难,因此可以使用外观模式,将一起使用的方法封装在一起,这样只需要调用这个外观的方法即可完成。

我们看一下外观模式的UML图:

实例

采用智能家居的例子来理解外观模式,例子很简单,当我们按下一键启动开关,就可以为我们打开/关闭窗户、电视、空调、灯光等。

先看一些类图:

具体代码如下:

①、定义子系统

子系统分为:灯光、空调、电视、窗户。采用单例模式,并且声明开启、关闭的方法。

这里只粘贴一个,其他的代码类似。

package com.lyd.demo.subsystem;
/**
* @Author: lyd
* @Description: 子系统 - 空调
* @Date: 2022-08-31
*/
public class AirConditioner {
private static AirConditioner airConditioner = new AirConditioner();
public static AirConditioner getAirConditioner() {
return airConditioner;
}
public void on() {
System.out.println("智能家居为您打开[空调]");
}
public void off() {
System.out.println("智能家居为您关闭[空调]");
}
}

②、外观类

采用单例模式,实例化对象,并且根据需要去调用方法,暴露出接口即可完成,这里是启动所有设备,还可以根据需要去选择。

package com.lyd.demo.faced;
import com.lyd.demo.subsystem.AirConditioner;
import com.lyd.demo.subsystem.Lights;
import com.lyd.demo.subsystem.Tv;
import com.lyd.demo.subsystem.Windows;
/**
* @Author: lyd
* @Description: 外观模式
* @Date: 2022-08-31
*/
public class SmartHomeFaced {
private Lights[] lights = new Lights[4]; // 4盏灯
private Tv tv;
private AirConditioner airConditioner;
private Windows windows;
public SmartHomeFaced() {
this.lights[0] = Lights.getLights();
this.lights[1] = Lights.getLights();
this.lights[2] = Lights.getLights();
this.lights[3] = Lights.getLights();
this.tv = Tv.getTv();
this.airConditioner = AirConditioner.getAirConditioner();
this.windows = Windows.getWindows();
}
public void openAll() {
lights[0].on(0);
lights[1].on(1);
lights[2].on(2);
lights[3].on(3);
tv.on();
airConditioner.on();
windows.on();
}
public void offAll() {
lights[0].off(0);
lights[1].off(1);
lights[2].off(2);
lights[3].off(3);
tv.off();
airConditioner.off();
windows.off();
}
}

③、测试

调用外观暴露的接口方法就可以。

package com.lyd.demo.test;

import com.lyd.demo.faced.SmartHomeFaced;

/**
* @Author: lyd
* @Description: 测试
* @Date: 2022-08-31
*/
public class FacedTest {
public static void main(String[] args) {
SmartHomeFaced smartHomeFaced = new SmartHomeFaced();
smartHomeFaced.openAll();
smartHomeFaced.offAll();
}
}

运行结果:

好文推荐

今天的内容还算是简单好理解的,多看看,多动手理解就会更快!

创作不易,可能有些语言不是很通畅,如有错误请指正,感谢观看!记得一键三连哦!

【设计模式】Java设计模式 - 外观模式的更多相关文章

  1. Java设计模式之《外观模式》及应用场景

    原创作品,可以转载,但是请标注出处地址http://www.cnblogs.com/V1haoge/p/6484128.html 1.外观模式简介 外观模式,一般用在子系统与访问之间,用于对访问屏蔽复 ...

  2. Java设计模式学习记录-外观模式

    前言 这次要介绍的是外观模式(也称为门面模式),外观模式也属于结构型模式,其实外观模式还是非常好理解的,简单的来讲就是将多个复杂的业务封装成一个方法,在调用此方法时可以不必关系具体执行了哪些业务,而只 ...

  3. 重学 Java 设计模式:实战外观模式「基于SpringBoot开发门面模式中间件,统一控制接口白名单场景」

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 你感受到的容易,一定有人为你承担不容易 这句话更像是描述生活的,许许多多的磕磕绊绊总 ...

  4. java设计模式-----12、外观模式

    Facade模式也叫外观模式,是由GoF提出的23种设计模式中的一种.Facade模式为一组具有类似功能的类群,比如类库,子系统等等,提供一个一致的简单的界面.这个一致的简单的界面被称作facade. ...

  5. Java描述设计模式(12):外观模式

    本文源码:GitHub·点这里 || GitEE·点这里 一.生活场景 1.场景描述 在移动互联网没有普及之前,去饭店吃饭的流程大致如下:选座位,排队,点菜,结账.后来移动互联网普及,通过手机APP就 ...

  6. Java设计模式11:外观模式

    外观模式 外观模式是对象的结构模式,外部与一个子系统的通信必须通过一个统一的外观对象进行.外观模式是一个高层次的接口,使得子系统更易于使用. 医院的例子 现代的软件系统都是比较复杂的.假如把医院比作一 ...

  7. java设计模式之九外观模式(Facade)

    外观模式是为了解决类与类之家的依赖关系的,像spring一样,可以将类和类之间的关系配置到配置文件中,而外观模式就是将他们的关系放在一个Facade类中,降低了类类之间的耦合度,该模式中没有涉及到接口 ...

  8. 设计模式学习心得<外观模式 Facade>

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

  9. PHP设计模式之:外观模式

    外观模式: 外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用: 外观模式又称为门面模 ...

  10. C#设计模式之十一外观模式(Facade)【结构型】

    一.引言 快12点半了,要开始今天的写作了.很快,转眼设计模式已经写了十个了,今天我们要讲[结构型]设计模式的第五个模式,该模式是[外观模式],英文名称是:Facade Pattern.我们先从名字上 ...

随机推荐

  1. java: 程序包org.springframework.boot不存在

    如果你的settings中的maven配置没问题的话,尝试下面这个 在控制台输入  mvn idea:idea  重构一下

  2. UML之顺序图(时序图)

    1 顺序图 1.1 顺序图的概念 顺序图(sequence diagram): 用来描述为了完成确定事务,对象之间按照时间消息交互的顺序关系. 1.2 顺序图样式和元素 (1) 对象及命名 (2) 生 ...

  3. 关于android sdk中monitor.exe报错的问题

    今天又是被坑的一上午.来总结一下: 1. 首先是找不到monitor的问题: 这个可能是一开始环境配置错误.所以我将android sdk重装了一下就好了 2. 第二个是找到monitor.bat发现 ...

  4. PaddleOCR系列(一)--环境搭建

    官方建议使用他们的docker镜像,所以我们按照他们建议的来. 环境搭建其实很简单,其实不需要在宿主机上配置cuda及cudnn,只需要保证宿主机上的cuda大于docker镜像中的就可以了. 所以我 ...

  5. 分享|2022数字安全产业大数据白皮书(附PDF)

    内容摘要: 2021年以来,数字安全赛道的受关注程度达到一个历史新高度.<数据安全法><个人信息保护法><关键信息基础设施安全保护条例>,一个接一个重磅的法规接连出 ...

  6. CF1705A Mark the Photographer 题解

    题意: 给定一队人的身高,将其分成两队,问能否实现前面的人均低于后面的人至少 \(x\) 个单位长度. 做法: 将这队人的身高进行排序,\(h_1 \sim h_n\) 即为第一队,\(h_{n+1} ...

  7. CF1700C Helping the Nature

    题目大意: 给出一个长度为 n 的序列 a,每次可以进行三种操作中的一种: 选择i,将 a_1,a_2,...,a_i减1. 选择i,将 a_i,a_i+1,...,a_n减1. 将所有 a_i加1. ...

  8. B.E.M 规范

    BEM文档 BEM: A New Front-End Methodology 如何看待 CSS 中 BEM 的命名方式? Battling BEM CSS: 10 Common Problems An ...

  9. 手把手带你实现基于 Vite+Vue3 的在线Excel表格系统

    今天,葡萄带你了解如何基于Vite+Vue3实现一套纯前端在线表格系统. 在正式开始项目介绍之前,首先咱们首先来介绍一下Vite和Vue3. Vue3 2020年09月18日Vue.js 3.0发布, ...

  10. 哈希-hash

    一. 概念 1.引例 有线性表(1,75,324,43,1353,90,46,-  ) 目的:查找值为90的元素 常见做法: 1.通过一维数组进行遍历查找 (依次比较)( O(n) ) 2.如果关键字 ...