1.适配器模式介绍
适配器模式(Adapter Pattern),是七大结构型设计模式之一。
适配器模式是使用非常高频的一个设计模式,比如RecycleView等等都需要使用到Adapter。
适配器是将两个不兼容的类融合在一起,有点像粘合剂,将不同的东西通过一种转换使得他们能够协作起来。
2.适配器模式的定义
适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。
3.适配器模式的使用场景
1.系统需要使用现有的类,而此类的接口不符合系统的需要,即接口不兼容。
2.想要建立一个可以重复使用的类,用于一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。
3.需要一个统一的输出接口,而输入端的类型不可预知。
4.UML类图
5.角色介绍
1.Target(适配器接口):目标角色,也就是所期待得到的接口。
2.Adaptee(被适配角色):即源角色,一般是已存在的类,现在需要适配的接口。
3.Adapter(具体适配器):适配器角色,适配器模式的核心。适配器把源接口转换成目标接口。这一角色不可以是接口,必须是具体类。
6.例子(类适配器模式,对象适配器模式)
例子分析:
1.类适配器模式和对象适配器模式的基本区别:类适配器模式是使用继承关系连接到Adaptee源角色类,对象适配器模式是使用代理关系连接到Adaptee类。
2.对象适配器模式使用组合的形式实现接口兼容的效果,比类适配器模式更为灵活,另一个好处是被适配对象中的方法不会暴露出来,而类适配器模式由于继承了被适配对象,被适配对象类的函数在Adater类中也都含有,使得Adapter类会出现一些莫名的接口,用户使用成本较高。所以对象适配器模式更加灵活,实用。
7.Android源码中的适配器模式
ListView的Adapter,其Item View千变万化,但最终都是View类型,ListView只需要知道getView()方法返回的是VIew就行,至于VIew是什么类型的,ListView不需要关心。
8.总结
在实际开发中适配器模式通常应用于:1.进行不兼容的类型转换的场景。2.输入有无数种情况,但是输出类型是统一的。
通过Adapter返回一个统一的输出,而具体的输入留给用户处理,内部只需知道输出的是符合要求的类型即可。
尽量多使用对象适配器模式,少使用类适配器模式。多用合成或者聚合,少用继承。当然具体问题具体分析。