Skip to main content

moregeek program

java设计模式 - 外观模式_wx630f055ce23fc的博客-多极客编程

目录

  • Java设计模式 - 外观模式

简介

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

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

————菜鸟联盟

外观模式之理解

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

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

Java设计模式 - 外观模式_智能家居

实例

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

先看一些类图:

Java设计模式 - 外观模式_智能家居_02

具体代码如下:

①、定义子系统

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

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

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设计模式 - 外观模式_外观模式_03

©著作权归作者所有:来自51CTO博客作者小二上酒8的原创作品,请联系作者获取转载授权,否则将追究法律责任

intellij idea运行eclipse项目或非maven项目的详细配置_积跬步,至千里。的博客-多极客编程

前言 至从使用IDEA开发工具以来,不少次有使用IDEA运行Eclipse项目或非Maven项目,都出现了一定问题,但每次都要花点时间仔细查看哪儿配置错误导致运行异常。这次又刚好遇到此类情况,故记录一下。 IntelliJ IDEA运行配置 IDEA打开项目 使用IDEA打开Eclipse项目或非Maven项目后不能直接使用,显示明显异常,还需要额外配置 导入具体项目 使用快捷键Ctrl+S

微软出品自动化神器playwright,不用写一行代码(playwright+java)系列_wx630f055ce23fc的博客-多极客编程

谈脚本录制话不多说,下面我们将开始进行讲解脚本的录制,请跟上脚步,相信我这一切并不难。调试工具​​Playwright Inspector​​ 是框架中自带的 ​​GUI​​ 工具,可以辅助我们调试 ​​Playwright​​ 脚本。三种方式启动Playwright Inspector1、设置环境变量 ​​PWDEBUG​​ 方式启动在 ​​debug​​ 模式下运行脚本文件。会进入 ​​Pla

面试官:单核 cpu 支持 java 多线程吗?什么?_wx630f055ce23fc的博客-多极客编程

由于现在大多计算机都是多核CPU,多线程往往会比单线程更快,更能够提高并发,但提高并发并不意味着启动更多的线程来执行。更多的线程意味着线程创建销毁开销加大、上下文非常频繁,你的程序反而不能支持更高的TPS。时间片多任务系统往往需要同时执行多道作业。作业数往往大于机器的CPU数,然而一颗CPU同时只能执行一项任务,如何让用户感觉这些任务正在同时进行呢? 操作系统的设计者 巧妙地利用了时间片轮转的方式

docker镜像多架构构建_wx630f055ce23fc的博客-多极客编程

目前arm系统越来越常见,对镜像的多架构需求也越来越大。对于同一个镜像,最简单的办法就是在amd64或arm机器上build后通过不同的tag进行区分,比如 nginx:v1-amd64 、 nginx:v1-arm64 ,但这种方式比较丑陋,而且没有对应架构的机器用来构建怎么办?目前最新的办法就是使用buildx来进行构建,不过这个特性目前默认是没启用的,需要在docker的配置文件中添加 "e

java基础学习总结--面向对象_wx6237f50e82bc0的博客-多极客编程

一、面向过程的思想和面向对象的思想面向对象和面向过程的思想有着本质上的区别, 作为面向对象的思维来说,当你拿到一个问题时,你分析这个问题不再是第一步先做什么,第二步再做什么,这是面向过程的思维,你应该分析这个问题里面有哪些类和对象,这是第一点,然后再分析这些类和对象应该具有哪些属性和方法。这是第二点。最后分析类和类之间具体有什么关系,这是第三点。      面向对象有一个非常重要的设计思维:合适的

java高级学习篇之网络编程_人生逐梦正当时的博客-多极客编程

一.基本概述(一)基本介绍        JAVA是Internet上的语言,它从语言级上提供了对于网络应用程序的支持,使得可以很容易开发常见的应用程序,同时,Java中也提供了网络类库,可以很方便的进行网络连接。(二)计算机网络       计算机网络是分布在不同地点的具有自治功能(具有完整的自处理设备)的计算机集合(>=2)。网络编程(目的):     直接或间接的通过网络协议与其他计算

intellij idea运行eclipse项目或非maven项目的详细配置_积跬步,至千里。的博客-多极客编程

前言 至从使用IDEA开发工具以来,不少次有使用IDEA运行Eclipse项目或非Maven项目,都出现了一定问题,但每次都要花点时间仔细查看哪儿配置错误导致运行异常。这次又刚好遇到此类情况,故记录一下。 IntelliJ IDEA运行配置 IDEA打开项目 使用IDEA打开Eclipse项目或非Maven项目后不能直接使用,显示明显异常,还需要额外配置 导入具体项目 使用快捷键Ctrl+S

微软出品自动化神器playwright,不用写一行代码(playwright+java)系列_wx630f055ce23fc的博客-多极客编程

谈脚本录制话不多说,下面我们将开始进行讲解脚本的录制,请跟上脚步,相信我这一切并不难。调试工具​​Playwright Inspector​​ 是框架中自带的 ​​GUI​​ 工具,可以辅助我们调试 ​​Playwright​​ 脚本。三种方式启动Playwright Inspector1、设置环境变量 ​​PWDEBUG​​ 方式启动在 ​​debug​​ 模式下运行脚本文件。会进入 ​​Pla

面试官:单核 cpu 支持 java 多线程吗?什么?_wx630f055ce23fc的博客-多极客编程

由于现在大多计算机都是多核CPU,多线程往往会比单线程更快,更能够提高并发,但提高并发并不意味着启动更多的线程来执行。更多的线程意味着线程创建销毁开销加大、上下文非常频繁,你的程序反而不能支持更高的TPS。时间片多任务系统往往需要同时执行多道作业。作业数往往大于机器的CPU数,然而一颗CPU同时只能执行一项任务,如何让用户感觉这些任务正在同时进行呢? 操作系统的设计者 巧妙地利用了时间片轮转的方式

docker镜像多架构构建_wx630f055ce23fc的博客-多极客编程

目前arm系统越来越常见,对镜像的多架构需求也越来越大。对于同一个镜像,最简单的办法就是在amd64或arm机器上build后通过不同的tag进行区分,比如 nginx:v1-amd64 、 nginx:v1-arm64 ,但这种方式比较丑陋,而且没有对应架构的机器用来构建怎么办?目前最新的办法就是使用buildx来进行构建,不过这个特性目前默认是没启用的,需要在docker的配置文件中添加 "e

java基础学习总结--面向对象_wx6237f50e82bc0的博客-多极客编程

一、面向过程的思想和面向对象的思想面向对象和面向过程的思想有着本质上的区别, 作为面向对象的思维来说,当你拿到一个问题时,你分析这个问题不再是第一步先做什么,第二步再做什么,这是面向过程的思维,你应该分析这个问题里面有哪些类和对象,这是第一点,然后再分析这些类和对象应该具有哪些属性和方法。这是第二点。最后分析类和类之间具体有什么关系,这是第三点。      面向对象有一个非常重要的设计思维:合适的

java高级学习篇之网络编程_人生逐梦正当时的博客-多极客编程

一.基本概述(一)基本介绍        JAVA是Internet上的语言,它从语言级上提供了对于网络应用程序的支持,使得可以很容易开发常见的应用程序,同时,Java中也提供了网络类库,可以很方便的进行网络连接。(二)计算机网络       计算机网络是分布在不同地点的具有自治功能(具有完整的自处理设备)的计算机集合(>=2)。网络编程(目的):     直接或间接的通过网络协议与其他计算