适配器模式(别名:包装器)
是一种结构型设计模式
将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
1、类适配器模式(Class Adapter Pattern)
2、对象适配器模式(Object Adapter Pattern)
3、接口适配器模式(Default Adapter Pattern)
把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。
1.旧系统接口升级:当系统升级后,新的接口可能与旧的接口不兼容。此时,可以使用适配器模式来包装旧系统的类,使其符合新系统的接口要求,从而无需修改旧系统的代码。
2.第三方库集成:当使用第三方库时,可能会发现库的接口并不符合项目的要求。通过使用适配器模式,可以创建适配器类来适配第三方库的接口,使其更容易集成到项目中。
3.多种数据库操作:在项目中可能需要支持多种数据库,每种数据库的操作接口可能不同。通过适配器模式,可以创建多个适配器类来适配不同的数据库接口,从而提供统一的数据库操作接口。
4.插件系统:在构建插件系统时,不同的插件可能具有不同的接口。通过适配器模式,可以创建适配器类来统一插件的接口,使得主程序可以更方便地与插件进行交互。
5.硬件接口适配:在软件与硬件通信的场景中,硬件提供的接口可能与软件需要的接口不匹配。通过适配器模式,可以编写软件适配器来适配硬件的接口,从而简化软件的开发
package task1;
public interface DBSocketInterface {
public void powerWithTwoRound();
}
package task1;
public interface GBSocketInterface {
public void powerWithThreeFlat();
}
package task1;
public class DBSocket implements DBSocketInterface {
@Override
public void powerWithTwoRound() {
// TODO Auto-generated method stub
System.out.println("使用两项圆头的插孔供电");
}
}
package task1;
public class SocketAdapter implements DBSocketInterface {
private GBSocketInterface gbSocket;
public SocketAdapter(GBSocketInterface gbSocket) {
// TODO Auto-generated constructor stub
this.gbSocket = gbSocket;
}
@Override
public void powerWithTwoRound() {
// TODO Auto-generated method stub
gbSocket.powerWithThreeFlat();
}
}
package task1;
public class GBSocket implements GBSocketInterface {
@Override
public void powerWithThreeFlat() {
// TODO Auto-generated method stub
System.out.println("正在使用三项扁头插头供电");
}
}
package task1;
public class Hotel {
private DBSocketInterface dbSocket;
public void setSocket(DBSocketInterface dbSocket) {
this.dbSocket = dbSocket;
}
public void charge() {
dbSocket.powerWithTwoRound();
}
}
测试类:
package task1;
public class Test {
public static void main(String[] args) {
GBSocketInterface gbSocket = new GBSocket();
Hotel hotel = new Hotel();
SocketAdapter socketAdapter = new SocketAdapter(gbSocket);
hotel.setSocket(socketAdapter);
hotel.charge();
}
}
在上面的代码中, GBSocket
是目标接口的具体实现类, SocketAdapter
是适配器接口的具体实现类,并且持有一个目标接口的引用。在客户端中,我们创建了一个目标接口的实例和一个适配器接口的实例,然后通过适配器接口调用目标接口的方法。