目录
简介
外观模式(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();
}
}
好文推荐
- 阿里云 - 开发者社区 https://developer.aliyun.com/article/420326
- 掘金 https://juejin.cn/post/6844903680303431693
今天的内容还算是简单好理解的,多看看,多动手理解就会更快!
:本文采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可, 转载请附上原文出处链接。
1、本站提供的源码不保证资源的完整性以及安全性,不附带任何技术服务!
2、本站提供的模板、软件工具等其他资源,均不包含技术服务,请大家谅解!
3、本站提供的资源仅供下载者参考学习,请勿用于任何商业用途,请24小时内删除!
4、如需商用,请购买正版,由于未及时购买正版发生的侵权行为,与本站无关。
5、本站部分资源存放于百度网盘或其他网盘中,请提前注册好百度网盘账号,下载安装百度网盘客户端或其他网盘客户端进行下载;
6、本站部分资源文件是经压缩后的,请下载后安装解压软件,推荐使用WinRAR和7-Zip解压软件。
7、如果本站提供的资源侵犯到了您的权益,请邮件联系: 442469558@qq.com 进行处理!
猪小侠源码-最新源码下载平台 PHP教程 Java设计模式之浅谈外观模式 http://www.20zxx.cn/586105/xuexijiaocheng/qes.html
猪小侠源码,优质资源分享网
相关文章
- java非法字符‘\\ufeff‘解决方法 2024-03-11
- Java中单体应用锁的局限性&分布式锁 2024-03-11
- 如何通过php函数解决页面渲染慢的问题? 2024-03-11
- 如何评估php性能优化函数的效果? 2024-03-11
- 如何利用PHP脚本在Linux中进行目录操作 2024-03-11
- 如何通过PHP脚本在Linux中进行系统监测 2024-03-11
- 如何使用php函数来优化表单处理和提交功能? 2024-03-11
- 如何通过PHP脚本在Linux服务器上实现数据加密 2024-03-11
- 如何通过php函数来优化验证码生成和校验? 2024-03-11
- 如何使用php函数来优化多语言支持功能? 2024-03-11
做猪小侠源码的代理,提供一站式服务
如果你不懂得搭建网站或者服务器,小程序,源码之类的怎么办? 第一通过本站学习各种互联网的技术 第二就是联系客服,我帮帮你搭建(当然要收取部分的费用) 第三成为我们的代理,我们提供整套的服务。