【设计模式】Java设计模式 - 外观模式

优质资源分享

学习路线指引(点击解锁) 知识定位 人群定位
Python实战微信订餐小程序 进阶级 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。
Python量化交易实战 入门级 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统

1|0Java设计模式 - 外观模式

不断学习才是王道
继续踏上学习之路,学之分享笔记
总有一天我也能像各位大佬一样
原创作品,更多关注我CSDN: 一个有梦有戏的人
准备将博客园、CSDN一起记录分享自己的学习心得!!!
分享学习心得,欢迎指正,大家一起学习成长!

【设计模式】Java设计模式 - 外观模式_第1张图片

目录* Java设计模式 - 外观模式
+ 简介
+ 外观模式之理解
+ 实例
- ①、定义子系统
- ②、外观类
- ③、测试
+ 好文推荐

1|1简介

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

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

1|2外观模式之理解

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

1|3实例

采用智能家居的例子来理解外观模式,例子很简单,当我们按下一键启动开关,就可以为我们打开/关闭窗户、电视、空调、灯光等。
先看一些类图:
【设计模式】Java设计模式 - 外观模式_第3张图片

具体代码如下:

1|0①、定义子系统

子系统分为:灯光、空调、电视、窗户。采用单例模式,并且声明开启、关闭的方法。
这里只粘贴一个,其他的代码类似。

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("智能家居为您关闭[空调]");
 }
}

1|0②、外观类

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

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();
 }
}

1|0③、测试

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

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设计模式 - 外观模式_第4张图片

1|4好文推荐

  • 阿里云 - 开发者社区 https://developer.aliyun.com/article/420326
  • 掘金 https://juejin.cn/post/6844903680303431693

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

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

__EOF__

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0mfrtHWv-1663216788224)(https://blog.csdn.net/lyd-code/p/16694723.html)]怒放吧德德 本文链接:https://blog.csdn.net/lyd-code/p/16694723.html关于博主:评论和私信会在第一时间回复。或者直接私信我。版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!声援博主:如果您觉得文章对您有帮助,可以点击文章右下角**【[推荐](javascript:void(0)】**一下。您的鼓励是博主的最大动力!

你可能感兴趣的:(11,设计模式,java,外观模式,计算机)