适配器模式,这个模式就是用来做适配的,它将不兼容的接口转换为可兼容的接口,让原本由于接口不兼容而不能一起工作的类可以一起工作。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| public interface ITarget { void f1(); void f2(); void fc(); } public class Adaptee { public void fa() { } public void fb() { } public void fc() { } } public class Adaptor extends Adaptee implements ITarget { public void f1() { super.fa(); } public void f2() { } }
public interface ITarget { void f1(); void f2(); void fc(); } public class Adaptee { public void fa() { } public void fb() { } public void fc() { } } public class Adaptor implements ITarget { private Adaptee adaptee; public Adaptor(Adaptee adaptee) { this.adaptee = adaptee; } public void f1() { adaptee.fa(); } public void f2() { } public void fc() { adaptee.fc(); } }
|
如果 Adaptee 接口并不多,那两种实现方式都可以。
如果 Adaptee 接口很多,而且 Adaptee 和 ITarget 接口定义大部分都相同,那我们推 荐使用类适配器,因为 Adaptor 复用父类 Adaptee 的接口,比起对象适配器的实现方 式,Adaptor 的代码量要少一些。
如果 Adaptee 接口很多,而且 Adaptee 和 ITarget 接口定义大部分都不相同,那我们 推荐使用对象适配器,因为组合结构相对于继承更加灵活。
适配器模式应用场景
1、封装有缺陷的接口设计
参考
《设计模式之美》