1. 适配器模式是怎样出现的
适配器模式的用途就是用来做适配的,它将不兼容的接口转换为可兼容的接口,让原本由于接口不兼容而不能一起工作的类可以一起工作. 适配器模式是一种补偿模式, 用来规避接口不兼容的问题.
不兼容的现象, 出现在调用一个方法的时候, 方法的形参和要传入的实参对象类型不符. 比如: 形参一般使用多态, 采用接口类型 InterfaceA
, 实参为类型 ClassB
, 二者没有实现关系.
2. 适配器的实现
作为适配器, 既要实现接口 InterfaceA
, 又要能使用目标类 ClassB
. ClassB
的使用, 可以通过继承, 也可以通过组合
-
类适配器: 通过继承使用
ClassB
// 类适配器: 基于继承 interface InterfaceA { void f1(); void f2(); void fc(); } class ClassB { public void fa() { //... } public void fb() { //... } public void fc() { //... } } public class Adaptor extends ClassB implements InterfaceA { public void f1() { super.fa(); } public void f2() { //...重新实现f2()... } // 这里fc()不需要实现,直接继承自ClassB,这是跟对象适配器最大的不同点 }
-
对象适配器: 通过组合使用
ClassB
// 对象适配器:基于组合 interface InterfaceA { void f1(); void f2(); void fc(); } class ClassB { public void fa() { //... } public void fb() { //... } public void fc() { //... } } public class Adaptor implements InterfaceA { private classB ClassB; public Adaptor(ClassB ClassB) { this.classB = ClassB; } public void f1() { classB.fa(); //委托给ClassB } public void f2() { //...重新实现f2()... } public void fc() { classB.fc(); } }
3. 代理,桥接, 装饰器, 适配器模式的区别
- 代理模式:代理模式在不改变原始类接口的条件下,为原始类定义一个代理类,主要目的是控制访问,而非加强功能,这是它跟装饰器模式最大的不同。
- 桥接模式:桥接模式的目的是将接口部分和实现部分分离,从而让它们可以较为容易、也相对独立地加以改变。
- 装饰器模式:装饰者模式在不改变原始类接口的情况下,对原始类功能进行增强,并且支持多个装饰器的嵌套使用。
- 适配器模式:适配器模式是一种事后的补救策略。适配器提供跟原始类不同的接口,而代理模式、装饰器模式提供的都是跟原始类相同的接口。
网友评论