android 设计模式篇 之 适配器模式
2019-12-17 本文已影响0人
treasure_ct

1.简介
在设计模式中,适配器模式(英语:adapter pattern)有时候也称包装样式或者包装(wrapper)。将一个类的接口转接成用户所期待的。一个适配使得因接口不兼容而不能在一起工作的类能在一起工作,做法是将类自己的接口包裹在一个已存在的类中。
2.分类
适配器模式属于结构型模式。
分为两类,对象适配器模式和类适配器模式。
最简单的比喻就是 android插口转Type C插口,香港电源适配器
1)对象适配器
在这种适配器模式中,适配器容纳一个它包裹的类的实例。在这种情况下,适配器调用被包裹对象的物理实体。

2)类适配器模式
这种适配器模式下,适配器继承自已实现的类(一般多重继承)。

3.简单的代码示例
(220V 转 5V)
1)创建适配器接口

2)创建需要转换的对象

3)创建具体的适配器
@1 对象适配器模式

@2 类适配器模式

二者的区别:一个是传入对象 一个是以子类方式去继承
4)去调用
前者为对象适配器调用 后者为类适配器模式

结果

5)比较
类适配器采用了继承的方式来实现;而对象适配器是通过传递对象来实现,这是一种组合的方式
适配器通过继承都获得了父类的方法,客户端使用时都会把这些方法暴露出去,增加了一定的使用成本;对象适配器则不会。
类适配器只能适配他的父类,这个父类的其他子类都不能适配到;而对象适配器可以适配不同的对象,只要这个对象的类型是同样的。
类适配器不需要额外的引用;对象适配器需要额外的引用来保存对象。
4.使用场景以及优缺点
当想使用一个已经存在的类,但它的接口不符合需求时。
当想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类协同工作。
提高了类的复用性,提高了类的灵活性(不同适配器不同功能),符合开闭原则,不修改原有的类
过多的使用适配器,会让系统非常零乱,不易整体进行把握。明明调用A接口,却被适配成B接口。