《golang设计模式》第二部分·结构型模式-01-适配器模式(Adapter)
文章目录
- 1. 概念
- 1.1 角色
- 1.2 应用场景
- 1.2 类图
- 2. 代码示例
- 2.1 设计
- 2.2 代码
- 2.3 示例类图
1. 概念
定义一个适配器,帮助原本不能实现接口的类“实现”该接口
1.1 角色
目标(Target):客户端调用的目标接口
被适配者(Adaptee):已经存在且运行良好的类或对象,但它不能实现Taget接口。
适配器(Adapter):继承或管理被适配者,且可以实现目标接口。
1.2 应用场景
- 背景
- 已经有一个目标接口供客户端调用
- 根据需求新增一个类(该类不能实现目标接口)
- 修改目标接口开销会很大
- 解决方法
- 我们新增一个类——适配器
- 适配器继承新增类,且可以实现目标接口
- 结果
- 客户端用适配器处理新增类的实例,得到的实例可以实现目标接口。
1.2 类图
2. 代码示例
2.1 设计
- 背景
- client通过Bird接口可以获取鸟类实例的信息
- 有一个Cat类,不能实现Bird接口
- 但是需要client调用Bird接口来获取Cat实例的信息
- 解决
- 创建一个适配器CatAdapter
- 它继承Cat类
- 且实现Bird接口
- 创建一个适配器CatAdapter
2.2 代码
package mainimport "fmt"
//之前有一个Bird接口,他可以Get鸟类的信息
type Bird interface {Get()
}//比如这个鹦鹉类,实现了Bird接口
type Parrot struct {Name stringFeather string
}func (parrot *Parrot) Get() {fmt.Printf("鹦鹉%q的颜色是:%q\n", parrot.Name, parrot.Feather)
}//业务需求,多了一个猫的类
type Cat struct {Name stringFur string
}
//它只有Show方法,不能实现Bird接口
func (cat *Cat) Show() {fmt.Printf("猫咪%q的颜色是:%q\n", cat.Name, cat.Fur)
}//我们创建一个猫的解释器,他继承了猫类,同时又可以实现Bird接口
type CatAdapter struct {Cat *Cat
}func (catAdapter *CatAdapter) Get() {catAdapter.Cat.Show()
}//有一个客户端
type Client struct {
}
//它可以直接获取bird信息
func (client Client) GetBird(bird Bird) {bird.Get()
}func main() {//实例化一个叫polly的鹦鹉polly := &Parrot{Name: "polly",Feather: "green",}//示例话一个叫tom的猫tom := &Cat{Name: "tom",Fur: "black",}client := Client{}//客户端可以直接使用pollyclient.GetBird(polly)//客户端可以通过解释器使用tomtomAdapter := &CatAdapter{Cat: tom}client.GetBird(tomAdapter)
}
2.3 示例类图
相关文章:
![](https://img-blog.csdnimg.cn/4a3d2dc909d846f3ade748eb38789629.png#pic_center)
《golang设计模式》第二部分·结构型模式-01-适配器模式(Adapter)
文章目录 1. 概念1.1 角色1.2 应用场景1.2 类图 2. 代码示例2.1 设计2.2 代码2.3 示例类图 1. 概念 定义一个适配器,帮助原本不能实现接口的类“实现”该接口 1.1 角色 目标(Target):客户端调用的目标接口 被适配者(…...
![](https://img-blog.csdnimg.cn/img_convert/1b6627eedaba4dbe6b74dde00daa2cfa.png)
机器学习概述及其主要算法
目录 1、什么是机器学习 2、数据集 2.1、结构 3、算法分类 4、算法简介 4.1、K-近邻算法 4.2、贝叶斯分类 4.3、决策树和随机森林 4.4、逻辑回归 4.5、神经网络 4.6、线性回归 4.7、岭回归 4.8、K-means 5、机器学习开发流程 6、学习框架 1、什么是机器学习 机器…...
![](https://www.ngui.cc/images/no-images.jpg)
识jvm堆栈中一个数据类型是否为为引用类型,目前虚拟机实现中是如何做的?
调用栈里的引用类型数据是GC的根集合(root set)的重要组成部分;找出栈上的引用是GC的根枚举(root enumeration)中不可或缺的一环。 要看JVM选择用什么方式。通常这个选择会影响到GC的实现。 如果JVM选择不记录任何这种…...
![](https://www.ngui.cc/images/no-images.jpg)
Bug合集
这里会收藏后面所遇到的bug并附上具有参考的意义的博客,会持续更新 Java 1、SpringBoot升级2.6.0以上后,Swagger出现版本不兼容报错。 Failed to start bean ‘documentationPluginsBootstrapper‘; nested exception is java.lang.NullPo…...
![](https://img-blog.csdnimg.cn/3040ece234f0473294eee1ab5a54c1ca.png)
linux下.run安装脚本制作
1、安装文件(install.sh) PS: .run安装包内部执行脚本文件 2、资源文件(test.zip) PS: 待安装程序源文件 3、制作.run脚本(install.run) cat install.sh test.zip > install.run chmod ax install.run...
![](https://img-blog.csdnimg.cn/6527ace46f434303aacb5b8d71c2c949.png)
面试热题(翻转k个链表)
给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。 k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。 你不能只是单纯的改变节点内部的值&a…...
![](https://www.ngui.cc/images/no-images.jpg)
前端面试的性能优化部分(4)每天10个小知识点
目录 系列文章目录前端面试的性能优化部分(1)每天10个小知识点前端面试的性能优化部分(2)每天10个小知识点前端面试的性能优化部分(3)每天10个小知识点前端面试的性能优化部分(4)每天…...
![](https://www.ngui.cc/images/no-images.jpg)
el-checkbox修改选中和未选中的值
由于在checkbox选中的时候,默认的是为true和false。 后端定义的绑定字段不是为布尔值,而是为0,1 解决办法 <el-checkbox v-model"model.status" :true-label"1" :false-label"0"> </el-checkbox>…...
![](image/UDP-example.png)
完整版:TCP、UDP报文格式
目录 TCP报文格式 报文格式 报文示例 UDP报文格式 报文格式 报文示例 TCP报文格式 报文格式 图1 TCP首部格式 字段长度含义Source Port16比特源端口,标识哪个应用程序发送。Destination Port16比特目的端口,标识哪个应用程序接收。Sequence Numb…...
![](https://www.ngui.cc/images/no-images.jpg)
如何远程连接云服务器oracle数据库
要远程连接云服务器上的Oracle数据库,可以按照以下步骤进行操作: 1. 确保你的云服务器已经安装了Oracle数据库,并且启动了数据库服务。 2. 登录到云服务器的操作系统。可以使用SSH工具(如PuTTY)连接到云服务器,使用管理员权限登录…...
![](https://www.ngui.cc/images/no-images.jpg)
“深入剖析JVM内部机制:探秘Java虚拟机的运行原理“
标题:深入剖析JVM内部机制:探秘Java虚拟机的运行原理 摘要:本文将深入剖析Java虚拟机(JVM)的内部机制,探秘其运行原理。我们将从JVM的结构、内存管理、垃圾回收、即时编译等方面展开讨论,并通过…...
![](https://img-blog.csdnimg.cn/c5efe98204f94589a7086f8b25697d05.png)
尚品汇总结十:秒杀模块(面试专用)
1、需求分析 所谓“秒杀”,就是商家发布一些超低价格的商品,所有买家在同一时间网上抢购的一种销售方式。通俗一点讲就是商家为促销等目的组织的网上限时抢购活动。由于商品价格低廉,往往一上架就被抢购一空,有时只用一秒钟。 秒…...
![](https://img-blog.csdnimg.cn/10d46553089841bb88ca77ab55e4a6fa.png)
什么是设计模式?
目录 概述: 什么是模式!! 为什么学习模式!! 模式和框架的比较: 设计模式研究的历史 关于pattern的历史 Gang of Four(GoF) 关于”Design”Pattern” 重提:指导模式设计的三个概念 1.重用(reuse)…...
![](https://img-blog.csdnimg.cn/4bdd7ec23e7a4f35b97e12d7556257b9.png)
Node.js |(三)Node.js API:path模块及Node.js 模块化 | 尚硅谷2023版Node.js零基础视频教程
学习视频:尚硅谷2023版Node.js零基础视频教程,nodejs新手到高手 文章目录 📚path模块📚Node.js模块化🐇介绍🐇模块暴露数据⭐️模块初体验⭐️暴露数据 🐇导入文件模块🐇导入文件夹的…...
![](https://img-blog.csdnimg.cn/7bd1202286764a43bd53396456b3ff77.png)
Netty自定义编码解码器
上次通信的时候用的是自带的编解码器,今天自己实现一下自定义的。 1、自定义一下协议 //协议类 Data public class Protocol<T> implements Serializable {private Long id System.currentTimeMillis();private short msgType;// 假设1为请求 2为响应privat…...
![](https://img-blog.csdnimg.cn/cce213973d8a44b28dbdae6ff3708cd0.png)
HOperatorSet.OpenFramegrabber “GigEVision“
HOperatorSet.OpenFramegrabber "GigEVision"访问失败 直接跳出 但其他算子可以访问 重装halcon x86...
![](https://www.ngui.cc/images/no-images.jpg)
图的遍历DFSBFS-有向图无向图
西江月・证明 即得易见平凡,仿照上例显然。留作习题答案略,读者自证不难。 反之亦然同理,推论自然成立。略去过程Q.E.D.,由上可知证毕。 有向图的遍历可以使用深度优先搜索(DFS)和广度优先搜索(…...
![](https://img-blog.csdnimg.cn/990cfdfd1d0142f49b52d7e3a23c2bdb.png)
【NLP】深入浅出全面回顾注意力机制
深入浅出全面回顾注意力机制 1. 注意力机制概述2. 举个例子:使用PyTorch带注意力机制的Encoder-Decoder模型3. Transformer架构回顾3.1 Transformer的顶层设计3.2 Encoder与Decoder的输入3.3 高并发长记忆的实现self-attention的矩阵计算形式多头注意力(…...
![](https://www.ngui.cc/images/no-images.jpg)
Linux应用编程的read函数和Linux驱动编程的read函数的区别
Linux应用编程的read函数用于从文件描述符(文件、管道、套接字等)中读取数据。它的原型如下: ssize_t read(int fd, void *buf, size_t count);其中,fd参数是文件描述符,buf是用于存储读取数据的缓冲区,co…...
![](https://img-blog.csdnimg.cn/eefbf54241e04c9aa98e887e3493e288.png)
Kubernetes(K8s)从入门到精通系列之十:使用 kubeadm 创建一个高可用 etcd 集群
Kubernetes K8s从入门到精通系列之十:使用 kubeadm 创建一个高可用 etcd 集群 一、etcd高可用拓扑选项1.堆叠(Stacked)etcd 拓扑2.外部 etcd 拓扑 二、准备工作三、建立集群1.将 kubelet 配置为 etcd 的服务管理器。2.为 kubeadm 创建配置文件…...
![](https://img-blog.csdnimg.cn/img_convert/421de6bdee5da64a3d0268ab4ede2698.png)
使用动态规划实现错排问题-2023年全国青少年信息素养大赛Python复赛真题精选
[导读]:超平老师计划推出《全国青少年信息素养大赛Python编程真题解析》50讲,这是超平老师解读Python编程挑战赛真题系列的第15讲。 全国青少年信息素养大赛(原全国青少年电子信息智能创新大赛)是“世界机器人大会青少年机器人设…...
![](https://img-blog.csdnimg.cn/46ae17e5a47e4290af9a84abf3dfa39f.png)
大规模向量检索库Faiss学习总结记录
因为最近要使用到faiss来做检索和查询,所以这里只好抽出点时间来学习下,本文主要是自己最近学习的记录,来源于网络资料查询总结,仅用作个人学习总结记录。 Faiss的全称是Facebook AI Similarity Search,是FaceBook的A…...
![](https://img-blog.csdnimg.cn/65a467e627e84889b97ccbddcece0c53.png)
SpringCloudAlibaba之Sentinel(一)流控篇
前言: 为什么使用Sentinel,这是一个高可用组件,为了使我们的微服务高可用而生 我们的服务会因为什么被打垮? 一,流量激增 缓存未预热,线程池被占满 ,无法响应 二,被其他服务拖…...
![](https://img-blog.csdnimg.cn/de3648c6c3e04c1186478610984f1c27.png#pic_center)
哪种模式ip更适合你的爬虫项目?
作为一名爬虫程序员,对于数据的采集和抓取有着浓厚的兴趣。当谈到爬虫ip时,你可能会听说过两种常见的爬虫ip类型:Socks5爬虫ip和HTTP爬虫ip。但到底哪一种在你的爬虫项目中更适合呢?本文将帮助你进行比较和选择。 首先,…...
![](https://img-blog.csdnimg.cn/img_convert/b091d29ce3eab111013f738aea980cc7.png)
优维低代码实践:对接数据
优维低代码技术专栏,是一个全新的、技术为主的专栏,由优维技术委员会成员执笔,基于优维7年低代码技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维人提供一个技术交流与学习的平台。 优维…...
![](https://www.ngui.cc/images/no-images.jpg)
docker 离线模式-部署容器
有网络的情况下下载需要的镜像 比如(下面以tomcat为例子,其他镜像类似) docker pull tomcat打包镜像文件到本地 docker save tomcat -o tomcat.tar将tomcat.tar 上传到内网服务器(无外网环境) 导入镜像 docker load -i tomcat.tar创建容器…...
![](https://www.ngui.cc/images/no-images.jpg)
MDN-HTTP
参考资料 文章目录 HTTP简介HTTP 和 HTTPSHTTP消息典型的HTTP会话HTTP响应状态HTTP安全HTTP CookieHTTP压缩 HTTP简介 HTTP(Hypertext Transfer Protocol)是一种用于在计算机网络中传输超文本和其他资源的应用层协议。他是互联网的基础协议之一&#x…...
![](https://www.ngui.cc/images/no-images.jpg)
【数据库】PostgreSQL中使用`SELECT DISTINCT`和`SUBSTRING`函数实现去重查询
在PostgreSQL中,我们可以使用SELECT DISTINCT和SUBSTRING函数来实现对某个字段进行去重查询。本文将介绍如何使用这两个函数来实现对resource_version字段的去重查询。 1. SELECT DISTINCT语句 SELECT DISTINCT语句用于从表中选择不重复的记录。如果没有指定列名&…...
![](https://img-blog.csdnimg.cn/eddab731db684f08b3cf816214209d4a.png)
笔记本WIFI连接无网络【实测有效,不用重启电脑】
笔记本Wifi连接无网络实测有效解决方案 问题描述: 笔记本买来一段时间后,WIFI网络连接开机一段时间还正常连接,但是过一段时间显示网络连接不上,重启电脑太麻烦,选择编写重启网络脚本解决。三步解决问题。 解决方案&a…...
![](https://img-blog.csdnimg.cn/9a7bb121d72a4fbbb4f882b5ee6c2033.png)
Java课题笔记~ Spring 概述
Spring 框架 一、Spring 概述 1、Spring 框架是什么 Spring 是于 2003 年兴起的一个轻量级的 Java 开发框架,它是为了解决企业应用开发的复杂性而创建的。Spring 的核心是控制反转(IoC)和面向切面编程(AOP)。 Spring…...
![](/images/no-images.jpg)
wordpress站点迁移/广告关键词有哪些类型
随着平台的更换,现在市场上的主流内存已经由DDR顺利的过渡到了DDR2,而DDR3也将出现在INTEL今年下半年的蓝图上。面对越来越多的内存品牌,很多朋友都问我,什么牌子的内存比较好,哪几个品牌比较实惠?最近几天…...
![](/images/no-images.jpg)
做招聘网站/深圳关键词推广排名
蓝桥杯国赛真题精选 ——Python 科目 题目 1 提示信息: 平方是一种运算,比如:a 的平方表示 aa。 例如:2 的平方为 4 (也就是 2*2 的积)例如:4 的平方为 16 (也就是 4*4 的积) 编程实现: 输入一个正整数n,将 1 到n 之间所有正整数(…...
![](/images/no-images.jpg)
动态网站制作软件/网站推广系统方案
M. Big brother said the calculation 通过线段树维护。 这个题和杭电的一道题几乎就是一样的题目。HDU5649.DZY Loves Sorting 题意就是一个n的排列,执行Q次操作,每次操作是对某个区间从小到大排序或者从大到小排序。最后只查询一次,输出第k…...
![](https://img-blog.csdnimg.cn/img_convert/bea8cc99aeb7991556e674c6cde8902f.png)
休闲零食网站建设 中企动力/杭州百度seo
为什么要远程连接Linux系统??在实际的工作场景中,虚拟机界面或物理服务器本地的窗口都是很少能够接触到的,因为服务器装完系统后,都要拉到IDC机房托管,如果是购买了云主机,更碰不到服务器本地显…...
![](http://hi.csdn.net/attachment/201004/15/1930218_1271320383168a.jpg)
百度手机网站建设/网络推广的手段
转:http://blog.donews.com/gengmao/archive/2004/08/09/63382.aspx 有两个 1、SGA trace 2、sql monitor TOAD 工具如下: SQLMonitor是TOAD 7.5带的一个工具。利用它可以监视本地进程通过SQL*Net发送的SQL语句,非常方便。没有它之前&…...
![](https://img-blog.csdnimg.cn/a55e848a3c554f878c29420625c7e364.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAaHVpZGFvbGk=,size_20,color_FFFFFF,t_70,g_se,x_16)
做视频网站 买带宽/南昌seo网站排名
创业市场 目录 1.重点 2.导图 3.正文 3.1. 市场的概述 3.1.1. 什么是市场?...