建设展示型网站公司哪家好/aso优化平台
目录
- 1. 简介
- 2. 代码
- 2.1 SelectFoodService (选择食品)
- 2.2 PayService (支付服务)
- 2.3 TakeService (制作服务)
- 2.4 OrderService (下单服务)
- 2.5 Food (食品)
- 2.6 TackingSystem (外观类)
- 2.7 Test (测试类)
- 3. 优缺点
- 3. 总结
1. 简介
外观模式是一种结构型设计模式。它为子系统中的一组接口提供了一个统一的高层接口,这个高层接口使得子系统更容易使用。就好像给一个复杂的机器(子系统)安装了一个简单的控制面板(外观类),用户通过操作这个控制面板就能轻松地使用机器的各种功能,而不需要了解机器内部复杂的结构和各个部件(子系统中的接口)是如何协同工作的。
例如,考虑一个计算机系统,它包含了 CPU、硬盘、内存等多个组件,每个组件都有自己复杂的操作接口。通过外观模式,可以创建一个 “计算机启动” 外观类,它内部封装了 CPU 初始化、硬盘加载系统文件、内存自检等操作。用户只需要调用 “计算机启动” 这个简单的操作,而不用去分别调用每个组件的复杂操作。
外观模式的结构组成
- 外观类(
Facade Class
)
这是外观模式的核心。外观类知道哪些子系统类负责处理请求,并将客户的请求代理给适当的子系统对象。它简化了与子系统的交互方式,对外提供了一个更加简单、统一的接口。例如,在上述计算机启动的例子中,“计算机启动” 类就是外观类。 - 子系统类(
Sub - system Classes
)
这些是实现具体功能的类,它们各自负责一个特定的、复杂的功能部分。在计算机系统中,CPU 类、硬盘类、内存类等都是子系统类。它们本身的操作可能很复杂,但外观类会对它们进行整合,使得用户不需要直接接触这些复杂的操作。
2. 代码
这里用点餐系统举例子。
2.1 SelectFoodService (选择食品)
public class SelectFoodService {public void select(String foodName){System.out.println("正在选择" + foodName + "。。。");}
}
2.2 PayService (支付服务)
public class PayService {public void pay(){System.out.println("正在支付。。。");}public boolean checkBanlance(){System.out.println("正在检查用户余额。。。");return true;}
}
2.3 TakeService (制作服务)
public class TakeService {public void taking(){System.out.println("正在制作外卖。。。");}
}
2.4 OrderService (下单服务)
public class OrderService {public void makeOrder(){System.out.println("正在下单。。。");}
}
2.5 Food (食品)
public class Food {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}
}
2.6 TackingSystem (外观类)
public class TackingSystem {private SelectFoodService selectFoodService;private PayService payService;private OrderService orderService;private TakeService takeService;public TackingSystem(){selectFoodService = new SelectFoodService();payService = new PayService();orderService = new OrderService();takeService = new TakeService();}public void orderTacking(Food food){// 点餐selectFoodService.select(food.getName());// 校验余额boolean isPay = payService.checkBanlance();// 支付if(isPay){payService.pay();takeService.taking();orderService.makeOrder();}}
}
2.7 Test (测试类)
public class Test {public static void main(String[] args) {Food food = new Food();food.setName("西红柿鸡蛋面");TackingSystem tackingSystem = new TackingSystem();tackingSystem.orderTacking(food);}
}
输出结果:
正在选择西红柿鸡蛋面。。。
正在检查用户余额。。。
正在支付。。。
正在制作外卖。。。
正在下单。。。
3. 优缺点
外观模式的优点
- 简化接口
为复杂的子系统提供了一个简单的、统一的接口,降低了客户端与子系统之间的耦合度。客户端只需要和外观类交互,不需要了解子系统内部的复杂细节,就像在家庭影院系统中,用户只需要通过外观类的 “watchMovie” 和 “endMovie” 方法就能轻松控制整个系统,而不用分别去操作每个设备。 - 提高可维护性和可扩展性
当子系统内部的结构和功能发生变化时,只要外观类的接口保持不变,客户端代码就不需要修改。例如,如果要升级 DVD 播放器的内部软件,只要它的 “turnOn” 和 “turnOff” 接口不变,外观类和客户端代码都不需要调整。同时,新的子系统可以很容易地添加到外观类中,方便系统的扩展。 - 实现了层次隔离
外观模式可以将系统的高层逻辑和底层实现分离开来。高层逻辑通过外观类来体现,底层的子系统则负责具体的功能实现。这种层次隔离使得代码的结构更加清晰,便于不同层次的开发人员分别进行开发和维护。
外观模式的缺点
- 不符合开闭原则的潜在风险
如果外观类的接口需要修改,可能会影响到所有使用该外观类的客户端。因为外观类是客户端和子系统之间的桥梁,一旦这个桥梁的接口发生变化,就可能需要修改客户端代码。例如,如果要在家庭影院系统的外观类中添加一个新的功能,如 “暂停电影”,那么所有使用这个外观类的客户端代码可能都需要相应地修改,这在一定程度上不符合开闭原则(对扩展开放,对修改关闭)。 - 外观类可能会变得过于复杂
如果子系统本身非常庞大和复杂,外观类需要整合大量的子系统接口,那么外观类可能会变得臃肿和复杂。这可能会导致外观类的维护成本增加,而且可能会降低代码的可读性。例如,一个大型企业级软件系统的外观类,如果要整合众多的子系统,如数据库管理系统、消息队列系统、文件存储系统等,外观类的代码可能会变得非常复杂。
3. 总结
其实就是定义多个子系统,一个总系统,随后总系统初始化多个子系统,然后使用就行了。
相关文章:

23种设计模式之外观模式
目录 1. 简介2. 代码2.1 SelectFoodService (选择食品)2.2 PayService (支付服务)2.3 TakeService (制作服务)2.4 OrderService (下单服务)2.5 Food (食品)2.6 TackingSystem (外观类)2.7 Test (测试类) 3. 优缺点3. 总结 1. 简介…...

GateWay使用手册
好的,下面是优化后的版本。为了提高可读性和规范性,我对内容进行了结构化、简化了部分代码,同时增加了注释说明,便于理解。 1. 引入依赖 在 pom.xml 中添加以下依赖: <dependencies><!-- Spring Cloud Gate…...

MySQL1.0
1.数据库的三大范式 范式是为了使数据库设计更加合理,规范,减少数据冗余和数据不一致等问题指定的一系列规则。 第一范式:第一范式要求数据表中的每一列都是不可分割的原子数据项。例如:有一个学生信息表,包含 “学生…...

IDEA使用HotSwapHelper进行热部署
目录 前言JDK1.8特殊准备DECVM安装插件安装与配置参考文档相关下载 前言 碰到了一个项目,用jrebel启动项目时一直报错,不用jrebel时又没问题,找不到原因,又不想放弃热部署功能 因此思考能否通过其他方式进行热部署,找…...

简单web项目自定义部署Dockerfile
本意就是弄清楚如何做web自定义项目的镜像。 基础镜像是java:8u261-jdk,其中java路径为/opt/java webdemo1.0.0.1-SNAPSHOT.jar文件里面已经包含了lib文件。 可以设置PATH也可以不设置,但是建议设置JAVA_HOME FROM swr.cn-north-4.myhuaweicloud.com…...

基础Web安全|SQL注入
基础Web安全 URI Uniform Resource Identifier,统一资源标识符,用来唯一的标识一个资源。 URL Uniform Resource Locator,统一资源定位器,一种具体的URI,可以标识一个资源,并且指明了如何定位这个资源…...

SpringBoot -拦截器Interceptor、过滤器 Filter 及设置
Spring Boot拦截器(Interceptor)的概念 - 在Spring Boot中,拦截器是一种AOP的实现方式。它主要用于<font style"color:#DF2A3F;">拦截请求</font>,在请求处理之前和之后执行特定的代码逻辑。与过滤器不同的…...

C++小问题
怎么分辨const修饰的是谁 是限定谁不能被改变的? 在C中,const关键字的用途和位置非常关键,它决定了谁不能被修改。const可以修饰变量、指针、引用等不同的对象,并且具体的作用取决于const的修饰位置。理解const的规则能够帮助我们…...

avcodec_alloc_context3,avcodec_open2,avcodec_free_context,avcodec_close
avcodec_alloc_context3 是创建编解码器上下文,需要使用 avcodec_free_context释放 需要使用avcodec_free_context 释放 /** * Allocate an AVCodecContext and set its fields to default values. The * resulting struct should be freed with avcodec_free_co…...

强化学习的几个主要方法(策略梯度、PPO、REINFORCE实现等)(下)
由于平台字数限制,上文:https://blog.csdn.net/ooblack/article/details/144198538 4. PPO算法 近端策略优化(proximal policy optimization,PPO)算法是OpenAI的默认强化学习算法,在RLHF中也用到了这个算…...

计算机网络:IP协议详细讲解
目录 前言 一、IP网段划分 二、IP报头 三、解决IP地址不足-->NAT技术 前言 在之前,我们学习了传输层中的TCP和UDP,重点是TCP协议,他帮我们解决具体到主机的哪个应用(端口)、传输的可靠(序列号、校验和…...

2024信创数据库TOP30之华为Gauss DB
近日,由DBC联合CIW/CIS共同发布的“2024信创数据库TOP30”榜单正式揭晓,汇聚了国内顶尖的数据库企业及其产品,成为展示中国信创领域技术实力与发展潜力的重要平台。在这份榜单中,华为的GaussDB凭借其卓越的技术实力、广泛的行业应…...

在线家具商城基于 SpringBoot:设计模式与实现方法探究
第3章 系统分析 用户的需求以及与本系统相似的在市场上存在的其它系统可以作为系统分析中参考的资料,分析人员可以根据这些信息确定出本系统具备的功能,分析出本系统具备的性能等内容。 3.1可行性分析 尽管系统是根据用户的要求进行制作,但是…...

九、Spring Boot集成Spring Security之授权概述
文章目录 往期回顾:Spring Boot集成Spring Security专栏及各章节快捷入口前言一、授权概述二、用户权限三、用户授权流程三、Spring Security授权方式1、请求级别授权2、方法级别授权 往期回顾:Spring Boot集成Spring Security专栏及各章节快捷入口 Spr…...

python之Flask入门—路由参数
语法: /routerName/<string:parameter_name> 其中:routerName代表路由名称<>中的string是参数类型,parameter_name为参数名称 参数类型: (1) string 接收任何没有斜杠(/&#x…...

txt地图格式处理
1、txt地图格式 [属性描述] 坐标系2000国家大地坐标系 几度分带3 投影类型高斯克吕格 计量单位米 带号38 精度0.001 转换参数,,,,,, [地块坐标] 5,475.888,1,测试地块1,面,J50G077061,公路用地,地下, J1,1,113.22222222222222,23.129111721551794 J2,1,113.2722314…...

《数据挖掘:概念、模型、方法与算法(第三版)》
嘿,数据挖掘的小伙伴们!今天我要给你们介绍一本超级实用的书——《数据挖掘:概念、模型、方法与算法》第三版。这本书是数据挖掘领域的经典之作,由该领域的知名专家编写,系统性地介绍了在高维数据空间中分析和提取大量…...

GitLab CVE-2024-8114 漏洞解决方案
漏洞 ID 标题严重等级CVE ID通过 LFS 令牌提升权限高CVE-2024-8114 GitLab 升级指南GitLab 升级路径查看版本漏洞查询 漏洞解读 此漏洞允许攻击者使用受害者的个人访问令牌(PAT)进行权限提升。影响从 8.12 开始到 17.4.5 之前的所有版本、从 17.5 开…...

request和websocket
当然,可以为你详细介绍 FastAPI 中的 Request 对象。Request 对象在 FastAPI 中扮演着重要的角色,负责封装来自客户端的 HTTP 请求信息。了解 Request 对象的使用方法和属性,有助于你更高效地处理请求数据、访问请求上下文以及进行各种操作。…...

一键生成后端服务,MemFire Cloud重新定义开发效率
作为开发者,特别是独立开发者和小团队成员,大家都知道开发的最大难题之一就是搭建后端服务。要让一个应用从零开始,除了前端的开发工作外,还需要考虑数据库、接口、认证、存储等等一系列繁琐的后台工作。而MemFire Cloud这款神器&…...

短视频矩阵的营销策略:批量混剪实现高效传播
在当今的商业环境中,短视频营销已成为企业获得市场份额的关键策略。随着消费者注意力的分散,传统营销方法的效果逐渐减弱。因此,短视频营销的重要性不言而喻。通过短视频,品牌能够以更为生动和直观的方式传递信息,从而…...

朗迪锋亮相2024人因工程与智能系统交互国际会议
2024年11月28日至30日,2024人因工程与智能系统交互国际会议在深圳隆重举办。此次大会以推动我国人因工程学科发展为目标,致力于加强国际学术交流,深入探讨人工智能时代的智能系统交互,旨在培育新质生产力,助力经济社会…...

spring boot3.3.5 logback-spring.xml 配置
新建 resources/logback-spring.xml 控制台输出颜色有点花 可以自己更改 <?xml version"1.0" encoding"UTF-8"?> <!--关闭文件扫描 scanfalse --> <configuration debug"false" scan"false"><springProperty …...

Proteus8.17下载安装教程
Proteus是一款嵌入式系统仿真开发软件,实现了从原理图设计、单片机编程、系统仿真到PCB设计,真正实现了从概念到产品的完整设计,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,能够帮助用…...

一次Kafka启动失败引出的问题
背景 Some time,有个现场童鞋说咱的Kafka实例有个broker一直crash,还截图给我看了,大致是Kafka启动加载topic分区日志文件的时候,然后就没了,连个WARN都没有。当然,光看这个截图咱啥都不知道,因…...

mysql 查询所有的触发器
SELECTTRIGGER_SCHEMA AS Database,TRIGGER_NAME AS Trigger,EVENT_OBJECT_TABLE AS Table,EVENT_MANIPULATION AS Event,ACTION_STATEMENT AS Statement FROMinformation_schema.TRIGGERS;创建触发器遇到报错: You do not have the SUPER privilege and binary lo…...

704. 二分查找 C++
文章目录 一、题目链接二、参考代码三、所思所悟 一、题目链接 链接: 704. 二分查找 二、参考代码 int search(const vector<int>& nums, int target) {int left 0; int right nums.size() - 1;//左闭右闭[]while (left < right){int mid (left right) / 2;…...

SpringCloud Seata集成分布式事务管理 事务保护 XA AT两种模式的区别
介绍 阿里巴巴的 Seata(Service Aligned Transaction Alternative)是一个开源的分布式事务解决方案,旨在解决微服务架构中跨服务、跨数据库的事务一致性问题。它可以帮助开发者管理分布式系统中的全局事务,确保在多个服务之间的事…...

node.js基础学习-querystring模块-查询字符串处理(三)
一、前言 querystring是 Node.js 中的一个内置模块,主要用于处理 URL 查询字符串。它提供了一些实用的方法来解析和格式化查询字符串,使得在处理 HTTP 请求中的查询参数等场景时非常方便。 还可以防止sql注入 二、解析查询字符串(parse方法&a…...

电子电气架构 --- 车载网关GW连接外部IP Tester
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 所谓鸡汤,要么蛊惑你认命,要么怂恿你拼命,但都是回避问题的根源,以现象替代逻辑,以情绪代替思考,把消极接受现实的懦弱,伪装成乐观面对不幸的…...