swift date 计算差_[Swift 设计模式] 适配器

v2-d2592064991de459d3c99fcbc7e0bc42_1440w.jpg?source=172ae18b
更多内容,欢迎关注公众号:Swift花园
喜欢文章?不如来个 ➕三连?关注专栏,关注我

将一个不兼容的对象转换成目标接口或者类,这是适配器模式的作用。


下面这件东西是适配器模式在现实世界中最贴切的表达。

v2-5254edc25868704f02f3d04ec5436563_b.jpg
USB-C to USB Adapter​www.apple.com
v2-7d9ae3481e1b99a9033f4401e9b040fe_180x120.jpg

适配器是一种结构化的设计模式,使得各种互不兼容的接口可以协同工作。换言之,它对一个对象的接口做转换,以对接另一个不同对象的接口。

因为适配器能够做变换,所以它有时候也被称为“包装器”:把一个对象包裹起来,然后提供一个新的接口。


实现适配器模式

在 Swift 中,实现适配器相当简单。你只需要创建一个新对象,把旧对象放进去,然后在新对象的类或者结构体上实现要求的接口。换言之,这个将源角色包装起来的类就是我们用来适配目标接口的适配器。

源角色

我们要适配目标接口的对象(例如,旧的USB-A接口)。

适配器

包装原始对象并且实现某个目标接口要求的对象。

目标

需要和源角色一起使用的对象 (我们的USB-C插槽)。


Swift中如何使用适配器模式?

当你想要在代码中集成第三方库时,可以用到适配器。第三方库的接口可能不符合你的需求,因此你可以在整个SDK或者后端API节点上创建一个包装器,以便提供统一的接口。

举个例子,我们将包装一个 EKEvent 对象,实现一个全新的协议。

import 

还有一种用法,当你不得不使用几个已经存在的类或者结构体,而这些类都是 final 的,并且缺少某些功能,因此你需要基于它们之上构建一些新的接口。这种情况下,最好的选择就是实现一个包装类,也就是适配器。 ‍♂️

其实不仅是 Swift,基本上在所有的编程语言中,适配器都很容易实现,它们是如此的不可或缺。


我的公众号 这里有Swift及计算机编程的相关文章,以及优秀国外文章翻译,欢迎关注~

v2-a35f9ea394372605bbbcf5fc7f90dc85_b.jpg

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

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

相关文章

委外订单_听听晚报-英特尔扩大芯片委外订单、苹果秋季或举行两场发布会

英特尔扩大芯片委外订单据外媒报道称,美国半导体厂商英特尔已与中国台湾芯片制造厂商台积电达成协议,明年开始采用后者7nm的优化版本6nm制程量产处理器或显卡,预估投片量将达到18万片。该消息发出后,资本市场反应剧烈,…

打开另外一个页面_如何在PDF页面中插入图片?

如何给PDF添加图片?有些时候为了丰富PDF的文档内容,需要添加一些图片,相比Word或PPT文档可以直接插入图片,而PDF的操作很多人可能并不熟悉,下面一起来看看如何在PDF文档中插入图片。关于PDF文档插入图片分为两种情况&a…

spring boot mybatis 整合_MyBatis学习:MyBatis和Spring整合

1. 整合的工程结构首先我们来看下整合之后的工程结构是什么样的。2. 配置文件在于spring整合之前,mybatis都是自己管理数据源的,然后sqlSessionFactory是我们自己去注入的,现在整合了,这些都要交给spring来管理了,来看…

python中缩进_python编程中的缩进是什么意思

Python最具特色的是用缩进来标明成块的代码。我下面以if选择结构来举例。if后面跟随条件,如果条件成立,则执行归属于if的一个代码块。 下面对比C语言来看一下if ( i > 0 ) { x 1; y 2; } 如果i > 0的话,我们将进行括号中所包括的两个…

返回后的数据处理_【掘金使用技巧2】掘金返回数据中时间的处理方法

掘金输出的时间数据处理方法掘金在为使用者提供数据时,有一类数据处理起来有些麻烦,这类数据就是时间数据。它们长这样:或者这样:查看一下它们的类型,发现有datetime,datetime64,Timestamp等等。这么多各种各样的类型&…

springboot jwt token前后端分离_为什么要 前后端分离 ?

作 者:互扯程序来 源:互扯程序广而告之:由于此订阅号换了个皮肤,系统自动取消了读者的公众号置顶。导致用户接受文章不及时。您可以打开订阅号,选择置顶(星标)公众号,重磅干货,第一时间送达&…

分计算iv值_一文读懂评分卡的IV、KS、AUC、GINI指标

前言:当一张评分卡构建完成时,筛选出一组特征生成了分数,我们会想要知道这个分数是否靠谱,即是否可以依赖这个分数将好坏客户区分开来,这个时候就需要评判评分卡有效性的指标。测量评分卡好坏区分能力的指标有许多&…

linux 查找文件夹_用python打造一个基于socket的文件(夹)传输系统

这段时间在学习python,接触到了网络编程中的socket这块,加上自己在用的Linux服务器都是原生支持python的,于是乎有了个做文件传输功能程序的想法。毕竟python语言中,有下载功能的框架一抓一大把,但是主机与主机间快速搭…

mysql gtid 备份恢复_MySQL基于gtid特性与xtrabackup的数据恢复

一、gtid特性介绍:GTID(global transaction identifier)是MySQL 5.6的新特性,可以唯一的标识一个事务,由UUIDTID组成:UUID是MySQL实例的唯一标识TID是该实例上已提交的事务的数量在主从复制中,GTID代替了classic的复制…

编码gbk的不可映射字符_Python基础:编码表和字符的故事

在计算机内部,都是每8位组成的一个个字节,比如我们使用"abc".encode()把abc转化成二进制byte类型,注意byte是不可变类型: 编码过程>>> abc.encode() # 把str字符变为bytes字节类型;字符是一个个连接…

mysql 中文字段名_MySQL全文索引怎么做?| 教程分享

- 点击上方“爱数据学习社”关注我们吧! -文末领取【商业分析资料】为什么要用全文索引我们在用一个东西前,得知道为什么要用它,使用全文索引无非有以下原因:like查询太慢、json字段查询太慢(车太慢了)没时间引入ElasticSearch、S…

leftjoin多个on条件_MYSQL|为什么LEFT JOIN会这么慢?

之前谈了怎样后台导出SAP序时账,因为导出的序时账数据量较大(3家主体公司,2017-2020年的数据),用了数据库MYSQL中的LEFT JOIN 来处理连接多表汇总数据,查询太慢啦,后来沦落到用手工分年来汇总数据,然后再导…

python 画布包括不了全部组件?_试验程序:画布版九键琴

近期有读者询问如何制作出滑动琴键连续发出声音的程序,他尝试用一排按钮充当琴键,但每次滑动只能触发一个按钮的点击事件,因此也只能发出一个声音。我提示他用画布替代按钮,他希望给予更具体的提示,于是我索性自己做了…

c 子类对象 访问父类对象受保护成员_06-JavaSe面向对象

一.static1.它是一种修饰符2.使用位置:它用来修饰成员变量和成员方法static修饰成员变量,叫类变量;static修饰成员方法,叫类方法;类成员类变量类方法没有使用static修饰成员变量,叫实例变量;没有…

c++ stack 遍历_C/C++内存分配!

一、预备知识—程序的内存分配一个由c/C编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap)…

python读取oracle数据到hvie parquet_关于sparksql操作hive,读取本地csv文件并以parquet的形式装入hive中...

说明:spark版本:2.2.0hive版本:1.2.1需求: 有本地csv格式的一个文件,格式为${当天日期}visit.txt,例如20180707visit.txt,现在需要将其通过spark-sql程序实现将该文件读取并以parquet的格式通过外部表的形式…

el-date-picker设置默认日期_程序员必备:Java 日期处理的十个坑

前言整理了Java日期处理的十个坑,希望对大家有帮助。一、用Calendar设置时间的坑反例:Calendar c Calendar.getInstance();c.set(Calendar.HOUR, 10);System.out.println(c.getTime());运行结果:Thu Mar 26 22:28:05 GMT08:00 2020解析&…

java命令_JAVA与模式之命令模式

在阎宏博士的《JAVA与模式》一书中开头是这样描述命令(Command)模式的:命令模式属于对象的行为模式。命令模式又称为行动(Action)模式或交易(Transaction)模式。命令模式把一个请求或者操作封装到一个对象中。命令模式允许系统使用不同的请求把客户端参数化&#xf…

android 16进制 全透明_你有几种实现方案Android 设备唯一标识?

前言项目开发中,多少会遇到这种需求:获得设备唯一标识DeviceId,用于:1.标识一个唯一的设备,做数据精准下发或者数据统计分析;2.账号与设备绑定;3.....分析这类文章,网上有许多资料&a…

链表的数据域怎么使用结构体_一步一步教你从零开始写C语言链表

为什么要学习链表?链表主要有以下几大特性:1、解决数组无法存储多种数据类型的问题。2、解决数组中,元素个数无法改变的限制(C99的变长数组,C也有变长数组可以实现)。3、数组移动元素的过程中,要对元素进行大范围的移动…