什么是适配器模式
适配器模式(Adapter Pattern)是一种结构型设计模式, 它能使接口不兼容的对象能够相互合作,即定义一个包装类,用于包装不兼容接口的对象。
适配器模式使用场景
- 当你希望使用某个类, 但是其接口与其他代码不兼容时, 可以使用适配器类。
- 如果您需要复用一些类, 他们处于同一个继承体系, 并且他们又有了额外的一些共同的方法, 但是这些共同的方法不是所有在这一继承体系中的子类所具有的共性。
适配器模式的优缺点
适配器模式的优点
- 增加了类的透明性和复用性,将具体的实现封装在适配者类中,对于客户端类来说是透明的,而且提高了适配者的复用性。
- 灵活性高,可自由适配,在实现适配器功能的时候,可以调用自己开发的功能,从而自然地扩展系统的功能。
- 符合开闭原则,只要客户端代码通过客户端接口与适配器进行交互, 你就能在不修改现有客户端代码的情况下在程序中添加新类型的适配器。
适配器模式的缺点
代码整体复杂度增加,过多的使用适配器,会让系统非常零乱,不易整体进行把握。
适配器模式的实现
类的设配器
/**
* 类适配器
*/
public class AdapterMain {
public static void main(String[] args) {
Target target = new Adapter();
target.request();
}
}
/**
* 适配器,满足调用者
*/
class Adapter extends Adaptee implements Target{
@Override
public void request() {
this.specificRequest();
}
}
/**
* 现有的类(要被适配的接口)
*/
class Adaptee{
void specificRequest(){
System.out.println("适配后调用了我");
}
}
/**
* 想要达到的效果(目标)
*/
interface Target{
void request();
}
对象的适配
/**
* 对象适配器
*/
public class AdapterMain {
public static void main(String[] args) {
Target target = new Adapter(new Adaptee());
target.request();
}
}
/**
* 适配器
*/
class Adapter implements Target{
/**
* 具体要适配的对象
*/
private Adaptee adaptee;
public Adapter(Adaptee adaptee) {
this.adaptee = adaptee;
}
public void request() {
adaptee.specificRequest();
}
}
/**
* 要被适配的对象
*/
class Adaptee{
void specificRequest() {
System.out.println("适配后调用了我");
}
}
/**
* 目标接口(想要达到的目的)
*/
interface Target{
void request();
}
总结
适配器模式是指定义一个适配器类,将一个已经存在的类,转换成目标接口所期望的行为形式,总而言之建议尽量使用对象的适配器模式,多用合成/聚合、少用继承。