Java设计模式-结构性设计模式(外观设计模式)

news2024/12/23 22:52:23

简介

  ⻔⾯模式,隐藏系统的复杂性,并向客户端提供了⼀个客户端可以访问系统的接⼝
  定义了⼀个⾼层接⼝,这个接⼝使得这系统更加容易使⽤

应用场景

  xxx是负责消息推送这个⼯作,看起来很轻松,但他们不知道⾥⾯有多复杂,xxx加班多久才输出⼀个统⼀的接⼝,只要轻松操作就可以完成复杂的事情
  开发⾥⾯MVC三层架构,在数据访问层和业务逻辑层、业务逻辑层和表示层的层与层之间使⽤interface接⼝进⾏交互,不⽤担⼼内部逻辑,降低耦合性
  各种第三⽅SDK⼤多会使⽤外观模式,通过⼀个外观类,也就是整个系统的接⼝只有⼀个统⼀的⾼层接⼝,这对⽤户屏蔽很多实现细节,外观模式经常⽤在封装API的常⽤⼿段
  对于复杂难以维护的⽼系统进⾏拓展,可以使⽤外观设计模式
  需要对⼀个复杂的模块或⼦系统提供⼀个外界访问的接⼝,外界对⼦系统的访问只要⿊盒操作

在这里插入图片描述

角色

外观⻆⾊(Facade)

  客户端可以调⽤这个⻆⾊的⽅法,这个外观⽅法知道多个⼦系统的功能和实际调⽤

⼦系统⻆⾊(SubSystem)

  每个⼦系统都可以被客户端直接调⽤,⼦系统并不知道⻔⾯的存在

案例demo

  在外⼈看来,xxx是负责消息推送这个⼯作,看起来很轻松,但他们不知道⾥⾯有多复杂需要对接微信消息、邮件消息、钉钉消息等,xxx长期加班,才输出⼀个统⼀的接⼝,只要轻松操作就可以完成复杂的事情⽤外观设计模式帮xxx完成这个需求

子系统角色 定义消息接口

/**
 *
 **/
public interface ImessageManager {

    void pushMessage();

}

微信消息的实现

/**
 *
 **/

public class WechatMessageManager implements ImessageManager {
    @Override
    public void pushMessage() {
        System.out.println("推送微信消息");
    }
}

短信消息的实现

/**
 *
 **/

public class SmsMessageManager implements ImessageManager {
    @Override
    public void pushMessage() {
        System.out.println("推送短信消息");
    }
}

外观角色

/**
 *
 **/

public class MessageFacade implements ImessageManager{

    private ImessageManager wechatMsgManager = new WechatMessageManager();

    private ImessageManager smsMsgManager = new SmsMessageManager();

    @Override
    public void pushMessage() {
        wechatMsgManager.pushMessage();
        smsMsgManager.pushMessage();
    }
}

测试

public class Main {

    public static void main(String[] args) {
        ImessageManager imessageManager = new MessageFacade();
        imessageManager.pushMessage();
    }
}

结果

推送微信消息
推送短信消息

优缺点

优点

  减少了系统的相互依赖,提⾼了灵活性
  符合依赖倒转原则:针对接⼝编程,依赖于抽象⽽不依赖于具体
  符合迪⽶特法则:最少知道原则,⼀个实体应当尽量少地与其他实体之间发⽣相互作⽤

缺点

  增加了系统的类和链路
  不是很符合开闭原则,如果增加了新的逻辑,需要修改facade外观类

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

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

相关文章

Jenkins结合allure生成测试报告

前言: 我们在做自动化测试的过程中最重要的肯定是报告的输出啦,最近几年allure可以说是最最主流报告展示工具啦。 一、服务端安装allure 在安装Jenkins的机器 安装allure,我们在Jenkins上能跑动前提是在对应服务器上代码能正常运行&#xf…

ESP8266使用记录(一)

1、23.7.17从TB买了个8266 2、下载安装Arduino 3、卖家的配套资料,直接覆盖相关文件 4、文件-首选项-设置-编辑器语言-中文(简体) 其他开发板管理器地址 http://arduino.esp8266.com/stable/package_esp8266com_index.json 5、工具-端口-COM6 工具-开发板-esp8266…

直接插入排序(C++实现)

文章目录 1. 基础概念🍑 内部排序和外部排序 2. 直接插入排序3. 动图演示4. 代码实现5. 性能分析 无论是日常生活还是很多科学领域当中,排序都是会经常面对的问题,比如按成绩对学校的学生排序,按薪水多少对公司员工排序等。 根据…

Vue系列之入门篇

前言: 目录 一,关于Vue的简介 1.什么是Vue? 2.使用Vue框架的好处? 3. 库和框架的区别: 4. MVVM的介绍 5.Vue的入门案例 二,Vue的生命周期 一,关于Vue的简介 1.什么是Vue? Vu…

详解混合类型文件(Polyglot文件)的应用生成与检测

1. 引入 混合类型文件(Polyglot文件),是指一个文件,既可以是合法的A类型,也可以是合法的B类型。 比如参考3中的文件,是一个html文件,可以用浏览器正常打开;它也是一个一个.jar文件&…

来看看Javadoc(文档注释)详解

Java 支持 3 种注释,分别是单行注释、多行注释和文档注释。文档注释以/**开头,并以*/结束,可以通过 Javadoc 生成 API 帮助文档,Java 帮助文档主要用来说明类、成员变量和方法的功能。 文档注释只放在类、接口、成员变量、方法之前…

代码随想录算法训练营第53天 | ● 1143.最长公共子序列 ● 1035.不相交的线 ● 53. 最大子序和

文章目录 前言一、1143.最长公共子序列二、1035.不相交的线三、53. 最大子序和总结 前言 动态规划 一、1143.最长公共子序列 确定dp数组(dp table)以及下标的含义 dp[i][j]:长度为[0, i - 1]的字符串text1与长度为[0, j - 1]的字符串text2的…

​云南财经大学《乡村振兴战略下传统村落文化旅游设计》许少辉八一著作

​云南财经大学《乡村振兴战略下传统村落文化旅游设计》许少辉八一著作

掌握这5种方法,让你的新AirPods充电盒更耐用!

每次AirPods充电盒落地时,你都会呼吸急促吗?无论我使用的是旧一代的AirPods还是最新的AirPod Pro 2,我都关心它们的保存状况,并尽力保护这些脆弱设备的安全。我想我对AirPods Pro 2的新充电盒也会有同样的感受,它在9月…

学校项目培训之Carla仿真平台之安装Carla

官网:http://carla.org/ 写在前面 由于安装都写了很多东西,所以我单独将安装弄出来记录一下。 如果你在安装9.12版本的时候遇到了很多问题,你可以考虑以下几点: - 楼梯可能不太行,需要更换,这是我实践得到的…

英语——记忆篇——谐音法+拼音法

中小学单词: 谐音法: 1.issue n.问题;(杂志、报刊的)一期;v.发行 谐音“一休”;想象聪明的一休很会解决问题,发行了一期杂志专门描述他解决问题的方法; issue 问题&…

电脑大文件删除了能恢复吗 电脑大文件删除了怎么恢复

在日常办公中,电脑是必不可少的办公工具,电脑能够帮助我们储存大量的大文件,但是有时候可能会因为一些误操作或者电脑故障等情况,导致一些电脑大文件的丢失,所以今天就和大家分享一下,电脑大文件删除了能恢…

[UE]碰撞和Trace检测

UE的碰撞和Trace检测 基础概念碰撞相关概念Overlap和Hit事件概念和条件使用示例 Trace检测引擎 World.h 中的TraceUKismetSystemLibrary 中的 TraceHitResultTrace示例LineTraceSphereTraceSingleBoxSweepSphereTraceCapsuleTrace 记录SetActorLocation中的Sweep和Teleport为啥…

CocosCreator3.8研究笔记(十九)CocosCreator UI组件(三)

前面的文章已经介绍了Layout 组件 、ScrollView 组件 、PageView 组件 。 想了解的朋友,请查看 CocosCreator3.8研究笔记(十八)CocosCreator UI组件(二)。 今天我们主要介绍CocosCreator 常用组件:Butt…

Windows 10 Enterprise LTSC 2021 (x86) - DVD (Chinese-Simplified)文件分享

Windows 10 Enterprise LTSC 2021 (x64) - DVD (Chinese-Simplified) SW_DVD9_WIN_ENT_LTSC_2021_64BIT_ChnSimp_MLF_X22-84402.ISO 镜像文件: 链接:https://pan.quark.cn/s/2f8f61ec4a98 Windows 10 Enterprise LTSC 2021 (x86) - DVD (Chinese-Simpli…

辐射威胁:揭示辐射对人体健康和肠道菌群的影响及防护

谷禾健康 辐射对人体的影响是一个长期以来备受关注的问题。长时间暴露在辐射环境下可能会导致细胞损伤、突变和癌症等健康问题。 辐射包括电离辐射(X光机、CT、伽马刀、钴60治疗机、碘-131)和非电离辐射(手机辐射、微波炉、电热毯、高压电塔、…

LeetCode(力扣)968. 监控二叉树Python

LeetCode968. 监控二叉树 题目链接代码 题目链接 https://leetcode.cn/problems/binary-tree-cameras/description/ 代码 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # …

翻牌闯关游戏

翻牌闯关游戏 3关:关卡由少至多12格、20格、30格图案:12个玩法:点击两张卡牌,图案一到即可消除掉 记忆时长(毫秒):memoryDurationTime:5000 可配置,默认5000 提示游戏玩法:showTipsFlag:1 可…

算法宝典2——Java版本(此系列持续更新,这篇文章目前3道)(有题目的跳转链接)(此份宝典包含了二叉树的算法题)

注:由于字数的限制,我打算把算法宝典做成一个系列,一篇文章就20题!!! 目录 一、二叉树的算法题(目前3道) 1. 平衡二叉树(力扣) 2. 对称二叉树&#xff0…

合肥先进光源国家重大科技基础设施项目及配套工程启动会纪念

合肥先进光源国家重大科技基础设施项目及配套工程启动会纪念 卡西莫多 合肥长丰岗集里 肥鸭从此别泥塘 先平场地设围栏 进而工地筑基忙 光阴似箭指日争 源流汇智山水长 国器西北扩新地 家校又添新区园 重器托举有群力 大步穿梭两地间 科教兴邦大国策 技术盈身坦荡行…