外观(门面)模式

news2024/10/2 18:20:29

思考外观模式

正常完成一个功能需要调很多个接口,外观模式就是组装这些接口为一个接口,对外提供这一个接口,用户调用这一个接口就能完成原来多个接口才能完成的功能,简化调用

1.外观模式的本质

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

Facade封装了子系统外部和子系统内部多个模块的交互过程,从而简化了外部的调用。通过外观,子系统为外部提供一些高层的接口,以方便它们的使用。

外观模式很好地体现了“最少知识原则”。

如果不使用外观模式,客户端通常需要和子系统内部的多个模块交互,也就是说客户端会有很多的朋友,客户端和这些模块之间都有依赖关系,任意一个模块的变动都可能会引起客户端的变动。

使用外观模式后,客户端只需要和外观类交互,也就是说客户端只有外观类这一个朋友,客户端就不需要去关心子系统内部模块的变动情况了,客户端只是和这个外观类有依赖关系。

这样一来,客户端不但简单,而且这个系统会更有弹性。当系统内部多个模块发生变化的时候,这个变化可以被这个外观类吸收和消化,并不需要影响到客户端,换句话说就是:可以在不影响客户端的情况下,实现系统内部的维护和扩展。

2.何时选用外观模式

建议在如下情况时选用外观模式。

  • 如果你希望为一个复杂的子系统提供一个简单接口的时候,可以考虑使用外观模式。使用外观对象来实现大部分客户需要的功能,从而简化客户的使用。如果想要让客户程序和抽象类的实现部分松散耦合,可以考虑使用外观模式,使用外观对象来将这个子系统与它的客户分离开来,从而提高子系统的独立性和可移植性。
  • 如果构建多层结构的系统,可以考虑使用外观模式,使用外观对象作为每层的入口,这样可以简化层间调用,也可以松散层次之间的依赖关系。

3.实现

模拟代码生成使用的外观模式

public class ControllerGenerate {

    public void generate(){
        System.out.println("controller层代码生成");
    }
}

public class ServiceGenerate {

    public void generate(){
        System.out.println("service层代码生成");
    }
}

public class DaoGenerate {

    public void generate(){
        System.out.println("dao层代码生成");
    }
}

门面类

public class Facade {

	//组装各个方法
    public static void generate(){
        ControllerGenerate controllerGenerate = new ControllerGenerate();
        ServiceGenerate serviceGenerate = new ServiceGenerate();
        DaoGenerate daoGenerate = new DaoGenerate();
        controllerGenerate.generate();
        serviceGenerate.generate();
        daoGenerate.generate();
    }
}

测试

public class FacadeTest {

    /**
     * 模拟代码生成过程
     * 1.生成controller层
     * 2.生成service层
     * 3.生成dao层
     * @param args
     */
    public static void main(String[] args) {
        ControllerGenerate controllerGenerate = new ControllerGenerate();
        ServiceGenerate serviceGenerate = new ServiceGenerate();
        DaoGenerate daoGenerate = new DaoGenerate();
        controllerGenerate.generate();
        serviceGenerate.generate();
        daoGenerate.generate();

        System.out.println("--------------------------------");

        Facade.generate();
    }
}

类图
在这里插入图片描述

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

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

相关文章

用户管理系统(1)

1)用户管理项目:基本功能介绍 1)登录功能:只能是超级管理员管理员登录,普通用户无法进行登录 2)用户的列表页面:普通用户的列表页和超级管理员的列表页 3)条件查询:组合条件查询,不定规则的查询,指定名称,指定籍贯,指定…

相控阵天线(二):非规则线阵(稀布阵列、稀疏阵列、平方率分布阵列)

概述 非规则线阵主要包括以下情况: 1. 不均匀间距阵列: a)不均匀间距递变阵列:单元间距按照一定的系数递增; b)稀布阵列:阵元间隔不是固定的,没有规律; c)稀…

广州蓝景分享—「JavaScript」this关键字的五个重要事项

首先this 关键字是 JavaScript 中最令人困惑的部分之一,今天通过介绍有关它的五个重要事项来阐明其目的和用法。 1、它允许访问同一对象上的其他属性 在 JavaScript 中,函数可以是独立的单元,但它们也可以用作对象的值。 考虑下一个对象。 …

SpringFramework:循环依赖与三级缓存

循环依赖与三级缓存 文章目录循环依赖与三级缓存一、Spring 中的循环依赖问题1. Spring 中的循环依赖概述2. Spring 中的循环依赖的 5 种场景二、Spring 三级缓存1. spring 创建 bean 的流程2. 场景一:单例的 setter 注入3. 三级缓存4. 关于二级缓存三、循环依赖的其…

ELFK——ELK结合filebeat日志分析系统(2)

目录 一、filebeat 二、ELFK 1.原理简介 2.在ELK基础上部署filebeat ​​​​​​ELK 企业级日志分析系统(1)_Evens7xxX的博客-CSDN博客 紧接上一期,这期会介绍ELK结合filebeat的部署和使用 一、filebeat Filebeat,轻量级的…

Word编辑论文,实现1.题目、摘要、关键词为通栏,正文为双栏 2.首页底端添加通栏脚注,在脚注中写作者简介,并使其实现悬挂对齐效果

Q1. 如何使题目、摘要、关键词为通栏,而下面开始的正文为双栏? 将光标移动到最后一个关键词后 布局—分隔符—分节符(连续) 将光标移动到正文第一个大标题前 布局—页面设置—文档网格—文字排列—栏数设置为 2,操作…

Python如何爬取免费爬虫ip

做过大数据抓取的程序员应该都知道,正常市面上的爬虫ip只分为两种,一种是API提取式的,还有一种是账密形式隧道模式的。往往因为高昂费用而止步。对于初学者觉得没有必要,我们知道每个卖爬虫ip的网站有的提供了免费IP,可…

基于CentOS使用宝塔+Nginx搭建个人小H站

本文目录前言第一步 - 购置服务器第二步 - 连接服务器第三步 - 安装宝塔第四步 - 部署网站总结前言 最近心血来潮,恰逢帅地老哥在公众号搞活动,白嫖了一台服务器,于是打算搭一个小网站玩玩。其实早有此念头,只是因为懒(●ˇ∀ˇ●…

项目实战——实现注册和登录模块

目录 一、整体框架 二、实现JwtToken验证 1、添加依赖 2、编写、修改相关类 三、实现后端 API 四、实现前端的登录,注册界面 ps:本篇文章篇幅较长,且难度有所提升,希望大家耐心看完,种一棵树最好的时间是十年前&…

ヾ(⌐ ■_■)— HTML-CSS常用属性

目 录 1.文字的设置 (1)文字的基本属性(font) (2)文字的排版以及添加文字的修饰 2.颜色的设置 3.背景的设置(background) 4.边框的相关设置 (1)边框样式的设置(border-style) (2)边框宽度的设置…

操作系统4小时速成:操作系统发展和分类,运行环境:运行机制和内核,用户态非特权,核心态特权,中断技术,访管指令

操作系统4小时速成:操作系统发展和分类,运行环境:运行机制和内核,用户态非特权,核心态特权,中断技术,访管指令 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂…

有趣的 Go HttpClient 超时机制

hello,大家好呀,我是既写 Java 又写 Go 的小楼,在写 Go 的过程中经常对比这两种语言的特性,踩了不少坑,也发现了不少有意思的地方,今天就来聊聊 Go 自带的 HttpClient 的超时机制。 Java HttpClient 超时底…

Ubuntu22.04中root用户下依然权限不够,执行不了可执行文件

文章目录先看现象解决方法什么情况下会遇到这样的错误先看现象 provider是一个C语言编译得到的可执行文件。 开始,我直接运行它,告诉我权限不够然后我加上sudo运行,告诉我找不到命令最后我进入root用户运行,竟然还告诉我权限不够…

PraNet: Parallel Reverse Attention Networkfor Polyp Segmentation

Tittle:用于息肉分割的并行反向注意力网络 摘要 准确的息肉分割主要面临着两个难点:1)相同类型的息肉有不同的大小,颜色和纹理。2)息肉与周围粘膜的边界模糊不清晰。 为了解决这些挑战本文提出了一种并行反向注意网络ParNet。具…

10、MySQL——子查询

目录 一、子查询 1、子查询出现的位置 2、子查询结果集的形式 二、实例演示 1、查询工资高于JONES的员工 1.1 分析 1.2 代码 2、查询与SCOTT同一部门的员工 2.1 分析 2.2 代码 3、工资高于30号部门所有人的员工信息 3.1 分析 3.2 代码 4、查询工作和工资…

mannose-OH|甘露糖-羟基|mannose-PEG-OH|甘露糖-聚乙二醇-羟基

mannose-OH|甘露糖-羟基|mannose-PEG-OH|甘露糖-聚乙二醇-羟基 羟基(oxhydryl)是一种常见的极性基团,化学式为-OH。羟基与水有某些相似的性质,羟基是典型的极性基团,与水可形成氢键,在无机化合物水溶液中以…

钙尔奇30周年以行动,力挺中国骨骼健康发展

启动行动力赋能新旅程 近日,2022年度西普会于中国海南博鳌盛大举行。以“构筑患者价值同心圆——二元发展驱动健康产业新增长”为主题,本届西普会的会议内容和参会主体全面升维,从全球视野到中国特色聚合优质资源、拓宽产业边界,…

vue项目中实际构建echarts拓扑关系图业务

vue项目中实际构建echarts拓扑关系图业务前言一、关系拓扑是什么?二、需求梳理三、封装关系图组件1.父组件引用2.测试数据引入3.封装关系子组件4.关系组件完整代码总结前言 由于现在echarts的利用率增强,需要用到拓扑图的设计,如果单纯针对e…

Ubuntu虚拟机安装

文章目录VMware添加虚拟机等待开机(需要一些时间安装系统)检查网络环境设置 Ubuntu 中文支持一些基础设置VMware添加虚拟机 文件——>新建虚拟机 下一步:安装程序光盘映像文件(iso) 设置主机名,用户名及…

reportportal 集成 robotframework 自动化执行及结果可视化

最近领导想了个需求,想把目前组内在linux平台上执行的自动化脚本搞成可视化,如果是web站点相关日志可视化倒是简单了,ELK就是不错的选择,大部分可视化项目这种的,可以做的开起来很炫。 我们这边是自己写的脚本&#x…