详解设计模式:外观模式

news2024/11/26 22:23:09

外观模式(Facade Pattern),又称为门面模式,是 GoF 的 23 种设计模式中的一种结构型设计模式。

外观模式 是指提供一个统一的接口去访问多个子系统的多个不同的接口,它为子系统中的一组接口提供一个统一的高层接口。使得子系统更容易使用。使用外观模式时,我们创建了一个统一的类,用来包装子系统中一个或多个复杂的类,客户端可以直接通过外观类来调用内部子系统中方法,从而外观模式让客户和子系统之间避免了紧耦合。

本篇内容包括:关于外观模式、外观模式实现 Demo


文章目录

    • 一、关于外观模式
        • 1、关于外观模式
        • 2、关于外观模式的构成
        • 3、关于外观模式的XML
        • 4、关于外观模式优缺点
    • 二、外观模式实现 Demo


一、关于外观模式

1、关于外观模式

外观模式(Facade Pattern),又称为门面模式,是 GoF 的 23 种设计模式中的一种结构型设计模式。

外观模式 是指提供一个统一的接口去访问多个子系统的多个不同的接口,它为子系统中的一组接口提供一个统一的高层接口。使得子系统更容易使用。使用外观模式时,我们创建了一个统一的类,用来包装子系统中一个或多个复杂的类,客户端可以直接通过外观类来调用内部子系统中方法,从而外观模式让客户和子系统之间避免了紧耦合。

外观模式 的本质是:封装交互,简化调用。

2、关于外观模式的构成

外观模式一般包含三种角色:

  • 外观(Facade)角色:为多个子系统对外提供一个共同的接口,IService。
  • 子系统(Sub System)角色:实现系统的部分功能,客户可以通过外观角色访问它,ServiceImpl。
  • 客户(Client)角色:通过一个外观角色访问各个子系统的功能,Controller。

3、关于外观模式的XML

在这里插入图片描述

4、关于外观模式优缺点

# 外观模式优点

  • 减低了子系统与客户端之间的耦合性,子系统的代码改变不会影响到客户端。这就是为啥天天说业务逻辑要放在 Serivce 实现层了,不仅仅是因为事务,改 Service 不会影响 Cotroller(假设多处地方调用该方法的情况下,除非你把方法参数和返回类型改了,这完全相当于删方法重写了不考虑);
  • 提高了代码的灵活性;
  • 提高了系统的安全性。

# 外观模式缺点

  • 不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。

二、外观模式实现 Demo

# SubSystem 子系统

public class SubSystemA {
    public void methodA(){

    }
}
public class SubSystemB {
    public void methodB(){

    }
}
public class SubSystemC {
    public void methodC(){

    }
}

# Facade 外观类

public class Facade {
    private SubSystemA obj1=new SubSystemA();
    private SubSystemB obj2=new SubSystemB();
    private SubSystemC obj3=new SubSystemC();

    public void method(){
        obj1.methodA();
        obj2.methodB();
        obj3.methodC();
    }
}

# Client 客户端

public class Client {
    public static void main(String[] args) {
        Facade facade=new Facade();
        facade.method();
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/48085.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

jeecgboot — docker 搭建 jeecgboot 项目 +本地VUE2 前端

后端: Docker镜像单体启动项目 1. 下载项目 git clone https://gitee.com/jeecg/jeecg-boot.git2. 本地配置host # jeecgboot 127.0.0.1 jeecg-boot-mysql 127.0.0.1 jeecg-boot-redis 127.0.0.1 jeecg-boot-system注意: 如果本地安装了mysql和…

基于PHP+MySQL超市库存管理系统的设计与实现

随着经济的高速发展,超市的信息化工作也在如火如荼地进行,由于超市规模的不断扩大以及商务往来的日益增多,超市对进销存信息的掌握和使用就越来越多,因此以前的原始的手工操作方式就不能适应超市快速发展的需要,在计算机科学技术日益发展和成熟的今天,运用其先进的技术性来管理…

Qt 自定义主题颜色,颜色选择器

灵感及素材来源: 暗玉紫 - 中国色 - 中国传统颜色 (zhongguose.com)http://zhongguose.com/#anyuzi实现效果 中国色 2022-11-29 15-37-121、支持读取颜色配置文件 2、支持动态添加自定义颜色 3、可自由调节颜色RGB值 4、三个圆形按钮显示和调整RGB,四…

nuxtjs中asyncData异步数据请求、代理配置、fetch网络请求、vuex的使用、中间件处理

文章目录1. asyncData异步数据请求2. 代理配置3. fetch网络请求4. vuex4.1 state中的数据展示4.2 同步方法与异步方法4.3 数据持久化处理5. 中间件处理1. asyncData异步数据请求 Nuxt.js 扩展了 Vue.js,增加了一个叫 asyncData 和 fetch 的方法,使得我们…

天宇优配|突然爆雷!大跌15%!

大家好,来一起重视上午的市场行情及最新资讯~ 11月30日上午,上证指数低开0.27%,深证成指跌0.16%,创业板指跌0.16%。盘面上,地产股持续发力,大消费、金融、航运等板块回调。 港股方面,恒指低开0…

命令模式

文章目录思考命令模式1.命令模式的本质2.何时选用命令模式3.优缺点4.实现耦合写法命令模式写法命令模式撤销思考命令模式 命令模式就是解耦强耦合代码,用户只关心功能的实现,开发者却可以利用命令模式在这之间加一些小动作,比如:撤…

天翎知识文档系统+群晖NAS,助力企业实现移动化学习

编者按:移动化学习成为一种社会发展趋势,本文分析了企业移动化学习的意义,并提出了企业移动化学习的一款全新解决方案——天翎知识文档系统群晖NAS。 关键词:多端适配,学习培训,智能问答,在线预…

Javascript脚本运算符执行顺序对照表

Javascript脚本运算符执行顺序对照表:在线查看Javascript脚本运算符执行优先级别 窍门: CtrlF 快速查找 Javascript脚本运算符优先级,是描述在计算机计算表达式时执行运算的先后顺序。Javascript脚本运算符优先级表,同一行中的运算…

巴西队提前出线,预定大力神杯?数据分析告诉你,到底谁才是冠军

2022年卡塔尔世界杯的第一轮小组赛,已经在众多惊诧、悲伤、惊喜的情绪中结束,而仅仅是第一轮的小组比赛,不断爆出的冷门就足以使人大跌眼镜了: 连续34场世界大赛不败的潘帕斯雄鹰——阿根廷,1-2负于世界排名51的沙特&…

天宇优配|百股涨停再现,沪指盘中创近两个月新高

周二A股商场呈现普涨格局,上证指数上涨2.31%,盘中最高点位创出最近两个月新高。各大职业板块近乎全线上涨,地产板块个股掀起涨停潮,数十只地产债盘中涨光临停。此外,A股大金融体现强势,疫苗股则尾盘忽然暴力…

号称Java圣经,Github上爆火的1058页JVM全栈小册到底有什么魅力

对于JVM,我想大部分小伙伴都是要面试了才会去学,其余时间基本不会去看(掐指一算,你们书架上面的深入理解Java虚拟机第三版应该都一层灰了吧【手动狗头】)。但值得一说的是,当你工作多年之后,你遇…

基于LSCF和LSFD算法在频域中识别快速实现的MIMO研究(Matlab代码实现)

👨‍🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜…

TensorFlow Lite 是什么?用 TensorFlow Lite 来转换模型(附代码)

文章目录TensorFlow Lite 做了什么?将一个模型用 TensorFlow Lite 转换训练一个简易模型保存模型转换模型加载 TFLite 模型并分配张量进行预测将在猫狗大战数据集上进行迁移学习的 MobileNetV2 转换到 TensorFlow Lite将模型转换到 TensorFlow Lite优化模型Referenc…

DFL3:软件版本的选择和安装详解

这本是一个简单的问题,但是对于新手而言,所有问题,总是说的越清楚越仔细越好。我之所以这么说,肯定是有人问了。所以我就专门开一篇文章来说一说,软件版本的异同,以及如何选择。针对不同的语言,…

如何快速定位到报错日志中的关键信息,一招学会,赶快GET吧

一般的服务器日志一个可能大的有几十上百m,小的也得几百k,里面内容是比较多的,如拿到日志没思路去看的话,下面一些办法可以让你快速定位到日志中的异常错误信息 文章目录步骤1:定位到错误信息再那个日志中(grep)步骤2:查看日志上下…

[附源码]计算机毕业设计springboot教育企业网站

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

鲲鹏devkit性能分析工具介绍(三)

鲲鹏devkit性能分析工具介绍(三) 本篇主要讲解鲲鹏devkit性能分析工具的访存分析功能 访存分析 访存统计分析基于CPU访问缓存和内存的PMU事件,分析存储的访问次数、命中率、带宽等情况。 Miss事件分析基于ARM SPE(Statistical…

固话号码认证有什么好处?固话号码认证有什么作用?

固话号码认证为企业提供号码认证服务,在来电时显示企业信息,可提高电话号码辨识度,防止错误标记,确保展现的企业信息与企业的手机终端、APP等多平台展示信息一致,保证品牌企业的身份及商业价值。 那如何上线号码认证服…

图的初识·基本概念

文章目录基本概念图有两种基本形式无向图的表示有向图的表示基本概念 图结构也是数据结构的一部分。而且还有一点小难。图是由多个结点链接而成的,但是一个结点可以同时连接多个其他结点,多个节点也可以同时指向一个节点。【多对多的关系】 图结构是任意…

iPhone升级iOS 16后出现提示“面容ID不可用”怎么办?

最近,很多用户在苹果社区反馈,iPhone升级iOS 16后Face ID不能用了,尝试重置Face ID时,系统会弹窗提示“面容ID不可用,稍后尝试设置面容ID。” 如果你的iPhone在没有摔落手机或是手机进水的情况下出现这个弹窗&#xff…