基本概念
客户:需要调用我们的代码的对象。
Adapter模式的宗旨:保留现有类所提供的服务,向客户提供接口,以满足客户的期望,或者在系统开发初期暂时使用了第三方提供组件,保留自己的接口,待系统成熟后,开发自己的组件。
适配器一般有如下两种实现方式
(1)类适配器:当客户在接口中定义了他期望的行为时,我们就可以应用适配器模式,提供一个实现该接口的类,并且扩展已有的类,通过创建子类来实现适配。
(2)对象适配器:对象适配器”通过组合除了满足“用户期待接口”还降低了代码间的不良耦合。在工作中推荐使用“对象适配”。
写个例子帮助理解下。
一个电子商务网站,在开发初期为了减小投资成本,打算网站支付功能调用第三方组件,但考虑到在系统成熟后,公司可能会自主开发组件,所以需要考虑到今后的组件的替换,所以再支付功能使用了适配器模式。
支付功能抽象为接口:
public interface IPay {
public boolean pay(int amount);
}
第三方支付组件:
public class ThirdPayTools {
public boolean pay(int amount)
{
if(amount > 100)
{
System.out.println("支付成功!");
return true;
}
else
{
System.out.println("金额不足!");
return false;
}
}
}
对象适配器:
public class PayAdapter implements IPay {
ThirdPayTools thirdPayTools = new ThirdPayTools();
@Override
public boolean pay(int amount) {
return thirdPayTools.pay(amount);
}
}
类适配器:
public class PayAdapter extends ThirdPayTools implements IPay {
public boolean pay(int amount) {
return super.pay(amount);
}
}
测试类:
public class Test {
public static void main(String[] args) {
IPay payAdapter = new PayAdapter();
payAdapter.pay(20);
payAdapter.pay(150);
}
}