以往讲了四期的创建型的设计模式,其实是五期,因为我把工厂模式和抽象工厂模式放在一篇文章中讲述了!今天我来写一篇全新的结构型的设计模式-----适配器模式
适配器模式如果细分的话可以分为三种,类适配器模式、对象适配器模式、接口适配器模式。适配器模式从字面上理解就有讲两个物体配对起来的意思,事实上它的意思其实就相当于充电器的充电头或者转接头的作用。将两个不兼容的但需要相互作用的物体一起工作但又不出现排斥现象,在这中间就需要适配器出来调节了!
大家都知道华为手机的充电接口大部分是type-c接口,苹果7以上基本用的都是Lightning充电接口!下面我就用这个不同接口之间转换的案例,来凸显出适配器的作用!
类适配器模式
先创建一个华为手机对象,并定义一个充电方法
再定义一个Lightning类型的充电接口类,定义一个它的自己的对应的方法返回一个lightning充电接口!
定义一个手机接口,创建一个接口转换方法,供具体子类来实现
先定义一个type-c接口适配器继承Lightning类型接口的类并实现手机接口转换的接口,重写转换接口的方法,进行判断如果为type-c接口就直接返回,不是就转变为type-c接口返回。
客户端只需简单的创建一个华为手机对象并调用充电方法传入所需的充电接口适配器就可以实现接口转换,从而给手机充上电了
运行后,结果也是如我们所愿。
接口适配器
先定义一个接口,内部写三个抽象方法
定义三个抽象类的适配器将接口所有方法默认实现
客户端如果需要接口中的某个方法只需通过创建适配器这个对象有选择性的覆盖重写所需的方法就可以了,不用去实现这个接口中所有的方法。
对象适配器模式
同样先定义一个华为手机对象,内容创建一个充电的方法
和上面的类适配器中的Lightning充电接口类大相径庭,这里相当于复制了一份
此接口同样是一个定义充电接口转换的抽象方法
从这个适配器开始不再像上面说的类适配器模式去继承了Lightning充电接口类了,而是换成了采用聚合的方式将Lightning对象放入适配器中去了,这也正好符合里氏替换原则,少继承多聚合或组合。适配器类重写转换接口方法,拿到充电接口类型判断是否为type-c类型,是就直接返回,不是就转换成type-c接口类型返回。
客户端通过创建一个华为手机对象调用其的充电方法,传入适配器对象和原接口对象,经过适配器的作用,就可以将Lightning类型的充电接口转换为type-c类型的充电接口
一执行果然适配器的作用就展现出来了,成功转成了type-c充电接口
总结:适配器最大的用处就是将不兼容的两个类可以互相作用和联系起来!