【PPT】适配器模式 和 桥接模式

【PPT】适配器模式 和 桥接模式
目录
【PPT】适配器模式 和 桥接模式
一、PPT 截图
1.0、封面和目录
1.1、设计模式概述
1.2、结构型模式特点
1.3、适配器模式
1.4、桥接模式
二、参考资料及 PPT 获取方法
独立观察员 2022 年 11 月 15 日

为之前公司准备的分享PPT,后来没用上。关于设计模式中的适配器模式和桥接模式,主要参考资料是公众号 “十一学技术” 的相关文章(《设计模式的艺术》中相关篇章的 C# 版)以及《大话设计模式》等。现将全部PPT页面截图贴上,完整 PPT 获取方式见文末。

一、PPT 截图
1.0、封面和目录

1633caa7f3bffbec6ffb1082bca902db.png

1bc1f8a6a2ef061d3ae1e4dccfe21481.png

1.1、设计模式概述

9e6b80ae79d3ac680fd6850721172185.png

bbd0754210fd85f276f72f8ba80c9b8d.png

97dc658aa4d93e89776ae671b80ea3d7.png

aabb7252db4dd704c325eba61241397c.png

0d3e853fb1a98b1e7678acfe82701d28.png


摘抄自《大话设计模式》

1.2、结构型模式特点

607fb3728d4f4caae3cf2b01bec2c093.png

66b34c24af480cb17ee187f39b849134.png


[1]https://wenku.baidu.com/view/283ce0ca0a75f46527d3240c844769eae009a381.html
[2]https://blog.csdn.net/weixin_44777669/article/details/116561497/
[3]https://blog.csdn.net/xyzyhs/article/details/103164185/

1.3、适配器模式

e31c292606771edc8a8344875d376abd.png

2ea5419e1bc28f39f36b3f7253e30474.png

720d3b10ceb58ee04ebe8689ed196191.png

437b06a23a0a8e3a1d408ba2b39ba86b.png


●Target(目标抽象类):目标抽象类定义客户所需要的接口,可以是一个抽象类或接口,也可以是具体类。
●Adapter(适配器类):适配器可以调用另一个接口,作为一个转换器,对 Adaptee 和 Target 进行适配。适配器类是适配器模式的核心,在对象适配器模式中,它可以通过继承 Target 并关联一个 Adaptee 对象使二者产生联系。
●Adaptee(适配者类):适配者即被适配的角色,它定义了一个已经存在的接口,这个接口需要适配。适配者一般是一个具体类,包含了客户希望使用的业务方法,在某些情况下可能没有适配者类的源代码。

30ed637eb4efd522fcda2d803b2985af.png


IScoreOperation 接口充当抽象目标,QuickSort 和 BinarySearch 充当适配者,OperationAdapter 充当适配器

00c0fccad685a04a365ac6b8c0fb860d.png

10bdd061f5d301d83e42959f25fdd83e.png

1.4、桥接模式

68cc3688a22cfa8bebdaa35cfb2af6a3.png

cc16b442f7bf61b6243219f8a341f8c7.png


在蜡笔中,颜色和型号两个不同的变化维度耦合在一起,无论是对颜色进行扩展,还是对型号进行扩展,都会对另一种维度产生影响。但在毛笔中,颜色和型号进行了分离,增加新的颜色或型号对另一方都没有任何影响。如果使用软件工程中的术语,可以认为,在蜡笔中颜色和型号之间存在较强的耦合性,而毛笔很好的将二者解耦,使用起来非常灵活,扩展也更为方便。

75afbd4c021e8ed68f0f020544143572.png


由于采用了多层继承结构,导致系统中的类的个数急剧增加。在该设计方案中,具体层类的个数 = 所支持的图像文件格式数 X 所支持的操作系统数。上图中类的个数已经达到了 17 个。
系统扩展麻烦,由于每一个具体类既包含图像文件格式信息,又包含了操作系统信息,因此无论是增加新的图像文件格式还是增加新的操作系统,都需要增加大量的具体类。

d709911460cc47cb0e4726d611eec795.png


●Abstraction(抽象类):其中定义了一个 Implementor (实现类接口)类型的对象并可以维护该对象。抽象类与 Implementor 之间具有关联关系,它既可以包含抽象业务方法,也可以包含具体业务方法。
●RefinedAbstraction(扩充抽象类):扩充由 Abstraction 定义的接口,通常情况下它不再是抽象类而是具体类。扩充抽象类实现了在 Abstraction 中声明的抽象业务方法,在 RefinedAbstraction 中可以调用在 Implementor 中定义的业务方法。
●Implementor(实现类接口):定义实现类的接口,这个接口不一定要与 Abstraction 的接口完全一致,事实上这两个接口可以完全不同。一般而言,Implementor 接口仅提供基本操作,而 Abstraction 定义的接口可能会做更多、更复杂的操作。Implementor 接口对这些基本操作进行了声明,而具体实现交给其子类。通过关联关系,在 Abstraction 中不仅拥有自己的方法,还可以调用到 Implementor 中定义的方法,使用关联关系来代替继承。
●ConcreteImplementor(具体实现类):具体实现 Implementor 接口,在不同的 ConcreteImplementor 中提供基本操作的不同实现。在程序运行时,ConcreteImplementor 对象将替换其父类对象,提供给抽象类具体的业务操作方法。

da41a0128e1084f3b25894faf5b32d50.png

70057497418b553b2c67c13d6c3bb507.png


将操作系统和图像文件格式两个维度分离。对于图片而言,由于图片格式是其固有的维度,因此可以设计一个抽象的图片类,在该类中声明并部分实现图片的业务方法,而将各种格式的图片作为其子类。绘制方法是图片的另一个维度,由于它与图片之间存在一种 “设置” 的关系,因此可以提供一个抽象的绘制接口,而将具体的系统绘制类作为实现该接口的子类。在此,格式可以认为是图片的抽象部分,而绘制是图片的实现部分。

9fd9f1b0c87621690d3c209e2d104ae5.png

8271ead2464ca5d83da2e65ec3966ed8.png

a8b59e4b5e811542ec228a8405be5005.png


afe41d52036559c7bac8d6697577a0a9.png

二、参考资料及 PPT 获取方法
参考:
1、[一起学习设计模式 --07. 适配器模式](https://mp.weixin.qq.com/s/L0XHVEvitMX-9B4YFY6phQ)
2、[一起学习设计模式 --08. 桥接模式](https://mp.weixin.qq.com/s/muLEonPdTdvch89im_0OEA)
3、《大话设计模式》/ [读书笔记](https://mp.weixin.qq.com/s/869acDHq_6Nx5C0TPXh9Ew)
4、互联网

PPT 获取方法:
关注微信公众号 “独立观察员博客”,回复 “PPT 适配器” 即可获取下载地址。

aa2971c98e8d9789c8eb585932cd51c0.png



原创文章,转载请注明:转载自独立观察员
本文链接地址:【PPT】适配器模式 和 桥接模式 [http://dlgcy.com/ppt-adapter-pattern-and-bridge-pattern/]


读书笔记

[读书笔记] 《修炼之道:.NET 开发要点精讲》

[读书笔记] 《大话设计模式》

作品

Windows 小工具之 Wifi 固定器

利用 C# 中的 FileSystemWatcher 制作一个文件夹监控小工具

使用 WPF 版简易 SIP 服务器向 GB28181 摄像头发送直播请求

下载中转加速器 VPSDownloader.NET(.NET Core 程序部署到 Linux 系统) 

『简易日志』NuGet 日志包 SimpleLogger

PDF 目录编辑器使用介绍

Winform

Winform 进度条弹窗和任务控制

Winform 通过 WebBrowser 与 JS 交互

WordPress

WordPress 网站使用 “微信机器人高级版” 插件连通微信公众号

WordPress 在侧边栏添加显示相关文章功能

自用 WordPress 插件推荐 Ⅱ

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

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

相关文章

Flask 【第七篇】Flask中的wtforms使用

一、简单介绍flask中的wtforms WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证。 安装: pip3 install wtforms 二、简单使用wtforms组件 1、用户登录 具体代码: from flask import Flask,render_template,request,…

CSS自定义滚动条样式

css通过滚动条伪类来修改滚动条样式,伪类名称如下 ::-webkit-scrollbar 滚动条整体部分 ::-webkit-scrollbar-track 滚动条轨道(里面装有滑块 thumb) ::-webkit-scrollbar-thumb 滚动条滑块 ::-webkit-scrollbar-button 滚动条轨道两端按钮 …

为了避免内存攻击,美国国家安全局提倡Rust、C#、Go、Java、Ruby 和 Swift,但将 C 和 C++ 置于一边...

本文翻译自两篇文章,第一篇是对美国国家安全局在“软件内存安全”网络安全信息表的解读,第二篇是普及什么是内存安全,为什么它很重要?第一篇 为了避免内存攻击,美国国家安全局提倡Rust、C#、Go、Java、Ruby 和 Swift&a…

自学python(一)

一、入门仪式 学习一门新语言必不可少的一件事: print("Hello world!")二、基础知识 1、注释: 单行注释: 1 print("Hello world!") #输出Hello world! 多行注释: 这是多行注释 这是多行注释 这是多行注释…

.NET周报【11月第2期 2022-11-15】

国内文章统一的开发平台.NET 7正式发布https://www.cnblogs.com/shanyou/archive/2022/11/09/16871945.html在 2020 年规划的.NET 5功能终于在.NET 7 完成了,为微软和社区一起为多年来将不同的开发产品统一起来的努力加冕,未来只有一个.NET, 回顾.NET 20…

如何像使用AspNetCore中的Controllers 和 Actions一样处理MQTT消息

在物联网项目中, 处理MQTT的topic时费工费力, 代码一团乱, 什么才是最好的姿势?这里面我们极力介绍 MQTTnet.AspNetCore.Routing 项目,MQTTnet AspNetCore Routing 是https://github.com/Atlas-LiftTech/MQTTnet.AspN…

chrome 悬停大图插件_Google Chrome浏览器的悬停卡:我不想要的我最喜欢的新东西

chrome 悬停大图插件If you only have a handful of open tabs in Google Chrome, it’s easy to tell what they are. But as you start to collect more tabs (or make the window smaller), it gets harder. That’s where Hover Cards come in. 如果您在Google Chrome浏览器…

GitHub Codespaces 安装 .NET 7

本文主要介绍如何在 GitHub Codespaces 这个云上 IDE 环境中安装 .NET 7背景GitHub 的 Codespaces 可以让我们随时随地编写代码,一些简单的修改也非常方便快捷。特别是 .NET 7 发布后,一些可以直接升级的小项目只需要更改配置就可以了,我们可…

chrome怎么隐藏浏览器_如何使用Google Chrome的隐藏阅读器模式

chrome怎么隐藏浏览器Chrome 75 has a hidden “Reader” mode that strips web pages down to the bare minimum to make them easier to, well, read. But it’s not enabled by default—here’s how to get it now. Chrome 75具有隐藏的“阅读器”模式,可将网页…

angularjs中使用swiper时不起作用,最后出现空白位

controller.js中定义swipers指令: var moduleCtrl angular.module(newscontroller,[infinite-scroll,ngTouch,news.service]) .directive(swipers,swipers); swipers.$inject [$timeout]; function swipers($timeout) {return {restrict: "EA",scope: {…

使用Jupyter记事本记录和制作.NET可视化笔记

前言:对于记录笔记的工具特别多,不过对于程序员来说,记录笔记程序代码运行结果演示可以同时存在,无疑会极大增加我们的笔记的可读性和体验感。以前在写python的时候,使用jupyter的体验很好,所以此处做一个基…

火狐上如何使用谷歌翻译插件_将Google翻译功能添加到Firefox

火狐上如何使用谷歌翻译插件Are you looking for a quick no-fuss way to translate webpages? Then you will want to take a good look at the Translate extension for Firefox. 您是否正在寻找一种快速简便的方法来翻译网页? 然后,您将需要很好地了…

Android 4.X 系统加载 so 失败的原因分析

1 so 加载过程 so 加载的过程可以参考小米的系统工程师的文章loadLibrary动态库加载过程分析 2 问题分析 2.1 问题 年前项目里新加了一个 so库,但发现native 方法的找不到的 crash 好多,好些都是报了java.lang.unsatisfiedlinkerror native method not f…

桌面显示激活windows_愚蠢的怪胎技巧:如何在桌面上显示Windows版本

桌面显示激活windowsHave you ever noticed during all the beta releases of Windows, there’s always a Windows version on the desktop in the lower right-hand corner? Here’s how that “feature” is enabled or disabled. 您是否曾经在Windows的所有beta版本中都注…

服务网格:限流保护 (上)

背景限流是服务治理中保护服务的重要手段之一,也是最直接有效的手段,它可以保护服务不被瞬间的大流量冲垮,类似电路中的“保险丝”。在服务上线前,我们都会对服务进行基准测试,来了解可通过的最大“电流”。上面所说的…

博弈论进阶之Anti-SG游戏与SJ定理

前言 在上一节中,我们初步了解了一下SG函数与SG定理。 今天我们来分析一下SG游戏的变式——Anti-SG游戏以及它所对应的SG定理 首先从最基本的Anti-Nim游戏开始 Anti-Nim游戏是这样的 有两个顶尖聪明的人在玩游戏,游戏规则是这样的: 有\(n\)堆…

怎样取消outlook约会_快速提示:在Outlook 2010中设置和取消约会

怎样取消outlook约会Getting everyone in one place at the same time for appointments can be daunting at times. Outlook makes it easy to setup appointments and invite attendees as well, and here we look at doing it in Outlook 2010. 同时让每个人都集中在一个地方…

重视和解决 ABP 分布式事件乱序问题

ABP Framework 5.0 实现了单体应用场景下,收件箱和发件箱的事件严格顺序性。但在微服务或多数据库场景下,由于网络时延和设施效率的限制, 分布式事件将不再是 Linearizability [1] 的,因此必然会存在物理时间上的收件乱序。借用 D…

个人博客建站方案推荐

1.服务器选择 正值双十一来临之际各大服务器提供商又大量的优惠活动,各位要步入个人站长行列的小哥们时机要把握好了,我个人使用过阿里云的服务器,腾讯云的服务器,华为云的服务器。其实,个人感觉就放个博客&#xff0c…

linux系统下nginx安装目录和nginx.conf配置文件目录

linux系统下nginx安装目录和nginx.conf配置文件目录 1、查看nginx安装目录 输入命令 # ps -ef | grep nginx 返回结果包含安装目录 root 2662 1 0 07:12 ? 00:00:00 nginx: master process /usr/sbin/nginx 2、查看nginx.conf配置文件目录 输入命令 # nginx…