结构型模式-适配器-桥接-外观-代理

适配器模式

是什么

将一个类的接口转换成客户希望的另外一个接口
解决接口不兼容问题,复用之前的代码

实例

在这里插入图片描述

在这里插入图片描述

public class PoliceCarAdapter extends CarController {  
private PoliceSound sound;//定义适配者PoliceSound对象  
private PoliceLamp lamp;//定义适配者Policelamp对象  //构造函数  
public PoliceCarAdapter(){  
sound = new PoliceSound();  
lamp = new PoliceLamp();  
}  
//发出警笛声音  
@Override  
public void phoate() {  
sound.alarmSound();  
}  
//呈现警灯闪烁  
public void twinkle()  
{  
lamp.alarmLamp();  
}  
}

通过适配器对象内部,包含实际的对象
在测试端调用适配器对象的方法时,会调用内部包含实际对象的方法,实现接口转化

桥接模式

是什么

将抽象部分与它的实现部分分离,使得他们可以独立的变化
将实现分离出来,独立变化
总的来讲,实现这个系统给功能,有不同角度的分类方式,我们将不同角度分离出来让他们肚子变化,减少之间的耦合,而他们之间的关系优先使用组合与聚合关系,而不是继承

实例

在这里插入图片描述
在这里插入图片描述

也是在Pen类中包含对Color类的引用

public abstract class Pen {  
protected Color color; //定义实现类接口对象  //设置颜色  
public void setColor(Color color)  
{  
this.color=color;  
}  
//绘图  
public abstract void paint(); //声明抽象业务方法  }public class Client {  
public static void main(String[] args) {  
Pen big=new BigPen();  
big.setColor(new Red());  
big.paint();  Pen middle = new MindlePen();  
middle.setColor(new Green());  
middle.paint();  Pen little = new LittlePen();  
little.setColor(new Blue());  
little.paint();  
}  
}

外观模式

是什么

为了让子系统的一组接口,提供一个一致的界面,定义一个高层接口,这个接口使得子系统更加容易使用

实例

在这里插入图片描述

在这里插入图片描述

public class Facade {  
Memory m;  
CPU cpu;  
HardDisk hardDisk;  
OS os;  public Facade(){  
m=new Memory();  
cpu = new CPU();  
hardDisk = new HardDisk();  
os = new OS();  
}  public void run()  
{  
m.check();  
cpu.run();  
os.load();  
hardDisk.read();  
}  
}

代理模式

是什么

为其他对象提供一种代理,以控制对这个代理的访问

实例

在这里插入图片描述
在这里插入图片描述

在代理对象中保存对真实对象的引用,
调用代理对象的方法,转到调用真实对象的方法

总结

适配器模式

总结

适配器模式的主要作用是将一个类的接口转换成客户希望的另一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。它主要分为类适配器模式和对象适配器模式,通过引入一个适配器类,将已有接口转换成目标接口,实现接口的兼容和复用。

优点

  • 提高了类的透明性和复用性。
  • 增加了系统的灵活性和扩展性。

桥接模式

总结

桥接模式是一种结构型设计模式,它将抽象部分与其实现部分分离,使它们可以独立变化。通过提供一个桥接接口,将抽象部分与实现部分解耦,降低了系统的耦合度,提高了系统的可扩展性和可维护性。

优点

  • 实现了抽象部分与实现部分的分离。
  • 提高了系统的灵活性和可扩展性。
  • 降低了系统的复杂度。

外观模式

总结

外观模式为多个复杂的子系统提供一个一致的接口,使这些子系统更加容易被访问。它定义了一个外观角色,负责将客户端的请求转发给子系统中的相应对象,从而简化客户端与子系统的交互。

优点

  • 降低了子系统与客户端的耦合度。
  • 提高了系统的易用性和可维护性。

代理模式

总结

代理模式为某对象提供一种代理以控制对该对象的访问。代理对象作为访问对象和目标对象之间的中介,可以限制、增强或修改目标对象的一些特性。它主要分为静态代理和动态代理两种,通过引入代理对象,实现了对目标对象的封装和访问控制。

优点

  • 实现了对目标对象的访问控制。
  • 增强了目标对象的功能。
  • 降低了系统的耦合度。

对比

  • 目的

    • 适配器模式:解决接口不兼容问题,实现接口的复用和转换。
    • 桥接模式:将抽象部分与实现部分分离,实现独立变化。
    • 外观模式:简化复杂子系统的访问,提供一致的接口。
    • 代理模式:控制对目标对象的访问,实现访问控制和功能增强。
  • 结构

    • 适配器模式:包含目标接口、适配者接口和适配器类。
    • 桥接模式:包含抽象部分、实现部分和桥接接口。
    • 外观模式:包含外观角色和子系统角色。
    • 代理模式:包含代理类、委托类和接口。
  • 应用场景

    • 适配器模式:适用于接口不兼容但需要一起工作的类。
    • 桥接模式:适用于抽象部分和实现部分需要独立变化的场景。
    • 外观模式:适用于需要简化复杂子系统访问的场景。
    • 代理模式:适用于需要控制对目标对象访问的场景。

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

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

相关文章

虚拟机U盘启动

二、注意事项 1、正确顺序是先插入U盘启动盘,再打开虚拟机,否则虚拟机无法检测到U盘; 2、如果已经打开虚拟机,则需关闭,插入U盘后重新开启。 3、设置好后如果换另一个U盘进行U盘启动,以下步骤要重新再设置&…

Python核心知识:pip使用方法大全

什么是 pip? pip 是 Python 的包管理工具,允许用户安装、升级和管理 Python 的第三方库和依赖。它极大地简化了开发过程,使开发者可以轻松地获取并安装所需的软件包。pip 已成为 Python 项目中最常见的包管理工具,并且自 Python …

windows C++-UWP 应用中使用 HttpRequest 类

在 UWP 应用中使用 HttpRequest 类 本节演示在 UWP 应用中如何使用 HttpRequest 类。 应用程序会提供一个输入框,该输入框定义了一个 URL 资源、用于执行 GET 和 POST 操作的按钮命令和用于取消当前操作的按钮命令。 使用 HttpRequest 类 1. 在 MainPage.xaml 中…

8639 折半插入排序

### 思路 折半插入排序是一种改进的插入排序算法,通过二分查找来确定插入位置,从而减少比较次数。每次插入时,先用二分查找找到插入位置,然后将元素插入到正确的位置。 ### 伪代码 1. 读取输入的待排序关键字个数n。 2. 读取n个待…

class 030 异或运算的骚操作

这篇文章是看了“左程云”老师在b站上的讲解之后写的, 自己感觉已经能理解了, 所以就将整个过程写下来了。 这个是“左程云”老师个人空间的b站的链接, 数据结构与算法讲的很好很好, 希望大家可以多多支持左程云老师, 真心推荐. https://space.bilibili.com/8888480?spm_id_f…

【CKA】五、网络策略–NetworkPolicy

5、配置网络策略–NetworkPolicy 1. 考题内容: 2. 答题思路: 1、根据题目分析要创建怎样的网络策略 2、按题目要求查看ns corp-net的label 3、编写yaml,其中注意 namespace、label、port 3. 官网地址: https://kubernetes.io/…

解决connect因父类不明确而报错的问题

如图所示&#xff0c;connect函数报错&#xff0c;原因是connect的检查是在编译期完成的&#xff0c;而传入父类则是在运行时&#xff0c;从而引起connect不知道parent是谁而报错。只需加入类型转换即可。 connect(qobject_cast<TableWidget*>(parent), &TableWidg…

STM32F1+HAL库+FreeTOTS学习15——互斥信号量

STM32F1HAL库FreeTOTS学习15——互斥信号量 1. 优先级翻转2. 互斥信号量3. 相关API函数&#xff1b;3.1 互斥信号量创建3.2 获取信号量3.3 释放信号量3.4 删除信号量 4. 操作实验1. 实验内容2. 代码实现3. 运行结果 上期我们介绍了数值信号量。这一期我们来介绍互斥信号量 1. 优…

【计算机毕业设计】springboot企业客户信息反馈平台

摘 要 网络的广泛应用给生活带来了十分的便利。所以把企业客户信息反馈管理与现在网络相结合&#xff0c;利用java技术建设企业客户信息反馈平台&#xff0c;实现企业客户信息反馈的信息化。则对于进一步提高企业客户信息反馈管理发展&#xff0c;丰富企业客户信息反馈管理经验…

官网:视觉是第一记忆,没有记忆点的官网设计是失败的。

官方网站虽然不像之前那么火爆了&#xff0c;但是依然是企业展示品牌形象和吸引用户的重要渠道。仅仅拥有一个官方网站并不足以吸引用户&#xff0c;更重要的是网站的设计是否能够给用户留下深刻的记忆。 当前&#xff0c;用户对于网站的要求也越来越高&#xff0c;他们不仅仅希…

Arduino UNO R3自学笔记16 之 Arduino的定时器介绍及应用

注意&#xff1a;学习和写作过程中&#xff0c;部分资料搜集于互联网&#xff0c;如有侵权请联系删除。 前言&#xff1a;学习定时器的功能。 1.定时器介绍 定时器也是一种中断&#xff0c;属于软件中断。 它就像一个时钟&#xff0c;可以测量事件的时间间隔。 比如早…

重置linux后vscode无法再次使用ssh连接

如果你使用过vscode ssh远程连接了一个Linux系统&#xff0c;但该系统被重置了&#xff0c;并且关键配置没有改变。再次使用vscode连接时&#xff0c;vscode可能无法连接。 原因&#xff1a;vscode远程连接后会在C:\Users{{你的用户名}}.ssh下的known_hosts和known_hosts.old。…

停止模式下USART为什么可以唤醒MCU?

在MCU的停止模式下&#xff0c;USART之类的外设时钟是关闭的&#xff0c;但是USART章节有描述到在停止模式下可以用USART来对MCU进行唤醒&#xff1a; 大家是否会好奇在外设的时钟被关闭的情况下&#xff0c;USART怎么能通过接收中断或者唤醒事件对MCU进行唤醒的呢&#xff1…

2024多模态大模型发展调研

随着生成式大语言模型应用的日益广泛&#xff0c;其输入输出模态受限的问题日益凸显&#xff0c;成为制约技术进一步发展的瓶颈。为突破这一局限&#xff0c;本文聚焦于研究多模态信息的协同交互策略&#xff0c;旨在探索一种能够统一理解与生成的多模态模型构建方法。在此基础…

基于springboot+小程序的在线选课管理系统1(源码+sql脚本+视频导入教程+文档)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于springboot小程序的在线选课管理系统实现了管理员、教师及学生。 1、管理员实现了首页、个人中心、管理员管理、教师管理、学生管理、课程信息管理、选课信息、公告管理、论坛管理、基…

Redis哨兵模式的搭建以及配置参数简介

原理 Redis哨兵模式是一种用于在Redis主从复制环境中进行高可用性监控和故障恢复的机制。该模式引入了一个或多个哨兵节点&#xff0c;这些节点负责监控Redis服务器的状态&#xff0c;并在主节点发生故障时切换为新的主节点。 哨兵节点的工作原理如下&#xff1a; 1、哨兵节点…

PDF阅读器工具集萃:满足你的多样需求

现在阅读书籍大部分都喜欢电子书的形式了吧&#xff0c;因为小小的一个设备就能存下上万本书。从流传程度来说PDF无疑是一个使用最广的格式。除了福昕PDF阅读器阅读之外还有哪些好用的阅读工具呢/&#xff1f;今天我们一起来探讨一下吧。 1.福昕阅读器 链接一下>>www.f…

MongoDB微服务部署

一、安装MongoDB 1.在linux中拉去MongoDB镜像文件 docker pull mongo:4.4.18 2. 2.创建数据挂载目录 linux命令创建 命令创建目录: mkdir -p /usr/local/docker/mongodb/data 可以在sshclient工具查看是否创建成功。 进入moogodb目录&#xff0c;给data赋予权限777 cd …

【算法】链表:21.合并两个有序链表(easy)

系列专栏 《分治》 《模拟》 《Linux》 目录 1、题目链接 2、题目介绍 3、解法&#xff08;双指针&#xff09; 4、代码 1、题目链接 21. 合并两个有序链表 - 力扣&#xff08;LeetCode&#xff09; 2、题目介绍 3、解法&#xff08;双指针&#xff09; 推荐一篇题解…

计算机毕业设计Python+Spark知识图谱高考分数线预测 高考志愿推荐系统 高考数据分析 高考可视化 高考大数据 大数据毕业设计

《PythonSpark知识图谱高考分数线预测与志愿推荐系统》开题报告 一、课题背景及意义 1. 背景 随着我国高考制度的不断完善以及大数据技术的快速发展&#xff0c;高考志愿推荐系统的需求日益增长。高考作为中国教育体系中的重要环节&#xff0c;其志愿填报直接关系到考生的未…