适配器模式是一种结构型设计模式,它可以用于解决两个接口不兼容的问题。在软件开发中,经常会出现这种情况:需要使用某个已有的类,但是它的接口与自己的需求不一致。这个时候,就可以使用适配器模式进行适配,使得原本不兼容的接口改变。
适配器模式有两种实现方式:类适配器和对象适配器。
类适配器实现方式是,适配类实目标接口。这样,适配器就使用原有类的方法,在实现目标接口的同时,对其方法进行适配。例如,我们有一个英语字典类,但是我们需要将它适配成中文翻译器。于是,我们可以创建一个类配器,继承英语字典类,同时实现中文翻译器接口。在适配器中重英语字典类中的方法,使够翻译成中文。
对象适配器的实现方式是,适配器持有原有类的一个实例,同时实现目标接口。这样,目标接口可以调用适配器,适配用有类的方法。例如,我们有支付类,但是我们需要将它适配成微信支付。于是,我们可以创建一个对象适配器,持有支付宝支付类的实例,在适配器中实现微信支付。在适配器中,我们可以调用支付宝支付类的方法,完成微信支付的适配。
适配器模式的优点是,它可以让原有的类和目标接口进行适配,从而避免了额外的代码修改和维护成本。此外,适配器模式也提高了代码的可复用性和可扩展性,使得代码更加灵活和易于维护。
总的来说,适配器模式是一种非常实用的设计模式,可以帮助我们处理接口不兼容的适配器或对象适配器,我们可以让原有的类和目标接口进行适配,从而使得系统更加灵活和易于扩展。
对象适配器
示例代码:
我们首先定义一个支付接口 Pay,里面包含支付方法 pay
public interface Pay {
void pay();
}
接着,我们定义一个支付宝支付的实现类 Pay 接口,实现支付方法 pay
public class Alipay implements Pay {
@Override
public void pay() {
System.out.println("使用支付宝支付");
}
}
现在我们需要将支付宝支付适配为微信支付。我们定义一个微信的适配器类,实现 Pay 接口,里面持有一个支付宝支付的实例,通过适配器的 pay 方法来调用支付宝支付的 pay 方法,从而实现微信支付的功能
public class WechatPayAdapter implements Pay {
private Alipay alipay;
public WechatPayAdapter(Alipay alipay) {
this.alipay=alipay;
}
@Override
public void pay() {
alipay.pay();
}
}
最后,我们在客户端代码中使用微信支付适配器来实现支付功能
public static void main(String[] args) {
Pay pay1=new WechatPayAdapter(new Alipay());
pay1.pay();
}