当前位置: 首页 > news >正文

常用设计模式系列(十一)—外观模式

常用设计模式系列(十一)—外观模式

第一节

前言

截止目前,我已经完成十一篇设计模式的原创文章,设计模式已经完成十个章节,我也收获了一丢丢粉丝,未来的日子有各位大佬的陪伴,我也会更加努力的高产。今天讲解对象结构型设计模式第四章节—外观模式,什么是外观模式呢?“外观”一词比较抽象,虽然这个模式不能够通过名称来一眼看出实现的过程,但是可以这么理解,一个看着漂亮又完整的整体,其实是有许多小的部分组成,一个光芒绽放的人,也是肯定一身技能在身,找到这个人,他就能做好几个人能完成的事情,他这个人本身就集中了许多人的优点。

第二节
外观模式

外观(Facade)模式又叫做门面模式,属于较为简单的一种设计模式,是通过将多个复杂的子系统进行整合,然后提供一个统一的接口,使这些子系统更加容易被访问的模式。几个子系统集中到一起时,这个模式就对外只有一个统一接口,可以访问子系统的方法,外部的程序不用关心内部系统实现的具体细节,在我们开发的过程中,许多人就会不自觉的使用外观模式。

在这里插入图片描述

在这里插入图片描述

其实这个模式很好理解,将多个子类在一个统一类进行整合,然后整合类作为统一入口使用,例如在项目开发过程中,我们的control(控制)层去调用service层进行实现,service层是整合了多个dao来完成业务开发,或者service层依赖别的service层,融合到一起,入口为这个整合的service类,control可以通过service查找dao层去数据库查询的数据,这样就能完成外观模式。

注意:外观模式就是将多个子系统的入口进行整合,在同一的接口完成,三个系统分别是三个入口,在这个接口中就是三个方法。

在这里插入图片描述

一个朋友离职以后,换了一家新的公司,然后到了新的城市需要租房子,为了快速找到房子,这个朋友就找到了房产中介,他考虑的是一室一厅或者两室一厅的房子,这个房产中介就拿着两把钥匙带着朋友看房子去了,你可以理解为中介就是外观角色,整合了资源,但是资源数不变,每个房东的房子在这里汇聚,真正的房东的房子就是子系统,房产公司就是抽象外观角色。

在这里插入图片描述

image

第三节

代码实现

本次代码实现使用一个外观角色完成,多个外观角色同理

1.创建子系统A和子系统B

package com.yang.facade;/*** @ClassName SubSystemOne* @Description 子系统——房东A* @Author IT小白架构师之路* @Date 2020/12/21* @Version 1.0**/
public class SubSystemOne {/*** 一室一厅的房子*/public void oneRoom(){System.out.println("一室一厅的房子");}
}package com.yang.facade;/*** @ClassName SubSystemTwo* @Description 子系统-房东B* @Author IT小白架构师之路* @Date 2020/12/21* @Version 1.0**/
public class SubSystemTwo {/*** 两室一厅的房子*/public void twoRoom(){System.out.println("两室一厅的房子");}
}

2.创建抽象外观角色

package com.yang.facade;/*** @ClassName OrderService* @Description 抽象外观* @Author IT小白架构师之路* @Date 2020/12/21* @Version 1.0**/
public interface AbstractFacade {/*** 一室一厅*/public void oneRoom();/*** 两室一厅*/public void twoRoom();
}

3.创建外观角色

package com.yang.facade;/*** @ClassName Facade* @Description 外观角色(前台接待人员)* @Author IT小白架构师之路* @Date 2020/12/21* @Version 1.0**/
public class Facade implements AbstractFacade {//房东Aprivate SubSystemOne subSystemOne = new SubSystemOne();//房东Bprivate SubSystemTwo subSystemTwo = new SubSystemTwo();/*** 一室一厅*/public void oneRoom() {System.out.println("中介带着看房子");subSystemOne.oneRoom();}/*** 两室一厅*/public void twoRoom() {System.out.println("中介带着看房子");subSystemTwo.twoRoom();}
}

4.创建客服端进行测试

package com.yang.facade;/*** @ClassName Client* @Description 注释* @Author IT小白架构师之路* @Date 2020/12/21* @Version 1.0**/
public class Client {public static void main(String[] args) {//外观对象AbstractFacade facade = new Facade();System.out.println("去看房子");System.out.println("-----------------分割线---------------");facade.oneRoom();System.out.println("-----------------分割线---------------");facade.twoRoom();}
}

5.测试结果如下,完成了外观模式的职责

去看房子
-----------------分割线---------------
中介带着看房子
一室一厅的房子
-----------------分割线---------------
中介带着看房子
两室一厅的房子

第四节

外观模式优缺点及适用场景分析

优点:

  1. 可以将系统中多个功能的接口进行整合,在一个类中进行聚合,方便客户端使用。

  2. 外观模式降低了客户端与子系统之间的耦合度

  3. 对客户端屏蔽了子系统组件,减少了客户端使用的对象数量,也屏蔽了处理过程

缺点:

  1. 增加新的子系统时,需要修改外观角色和客户端代码,违背了设计模式的“开闭原则”。

  2. 子系统能被任何外观类使用,后期改造风险增加

适用场景:

  1. 适用于一个系统内部接口较为复杂,但需要提供统一接对外调用的场景。

  2. 当客户端使用的子系统对象过多且臃肿时,可以引入外观模式改造,提高独立性。

  3. 系统中分层进行开发时,外观模式可以隔离不同层的调用关系错乱,统一管理。

扫描二维码

关注我吧

IT小白架构师之路

image

http://www.lryc.cn/news/598642.html

相关文章:

  • C++ 中打开文件的多种方式及相关流类
  • 三维手眼标定
  • Windows下使用UIAutomation技术遍历桌面窗口和指定窗口内容的AutomationWalker.exe的C#源代码
  • Java中的静态变量是在“堆“还是“方法区“?
  • 视频模型国产PK国外?
  • Leetcode—1035. 不相交的线【中等】
  • TDengine 转化类函数 CAST 用户手册
  • Windows 11下纯软件模拟虚拟机的设备模拟与虚拟化(仅终端和网络)
  • C++性能优化实战‘从毫秒到微秒的底层突围‘
  • Windows 10 停服:个人与企业的 “系统选择题”
  • MNIST 手写数字识别模型分析
  • 《使用Qt Quick从零构建AI螺丝瑕疵检测系统》——4. 前后端联动:打通QML与C++的任督二脉
  • LAYOUT 什么时候需要等长布线?
  • 【牛客刷题】和零在一起
  • 【Linux】Linux了解与基本指令(1)
  • 数据库期中复习
  • SkyWalking异步采集spring gateway日志
  • postgresql执行创建和删除时遇到的问题
  • AWS云S3+Glue+EMRonEC2+ReadShift
  • ThinkPHP8集成RabbitMQ的完整案例实现
  • 使用 Strands Agents 开发并部署生产级架构通用型个人助手
  • 【论文阅读】基于EEG的冥想状态数据挖掘研究(2025)
  • 深入探索Amazon SQS:构建弹性微服务与无服务器应用的秘密武器
  • Nodejs:从“模块未找到”到“大师之路”, 项目初始化与依赖安全完全指南
  • JimuReport 积木报表 v2.1.1 版本发布,免费开源的报表和大屏
  • 主流摄像头协议及其开源情况,GB/T 28181协议介绍
  • Word2Vec模型训练全流程解析:从数据预处理到实体识别应用
  • PyTorch常用Tensor形状变换函数详解
  • 如何恢复mysql,避免被研发删库跑路
  • 多模态数据处理系统:用AI读PDF的智能助手系统分析