介绍:
适配器模式,简单来说就是把原来不适配的两样东西,通过适配,使两样东西适配起来使用。现实生活有很多例子,比如两个口的插座,但是电器是3口的,就可以通过排插,让电器用起来,手机充电用的是插头,现在用电脑USB接口接点线也可以连接和充电,这也是适配器的使用,而在代码上也是如此,存量的一些功能可能需要进行新功能扩展,但是存量功能不满足,需要进行些许改造才能满足,这时候可以考虑使用适配器模式进行代码改造。
背景:
有一个功能,源类是传入账户余额,然后显示他存款有多少人民币。现在希望可以通过汇率转换,查看他有多少美元,日元,欧元,英镑4种币种,但是暂时的只需要实现美元的展示,这时候,就可以采用接口适配器模式,部分实现美元展示功能。
类适配模式博客:JAVA -- 适配器模式之 类适配器模式_DGH2430284817的博客-CSDN博客
对象适配模式博客:JAVA -- 适配器模式之 对象适配器模式_DGH2430284817的博客-CSDN博客
接口适配器模式:
RMB类(源类):
public class Money_RMB {
public BigDecimal showRmb( String money){
BigDecimal bigDecimal = new BigDecimal(money);
System.out.println("账户余额:" + bigDecimal +"人民币");
return bigDecimal;
}
}
美元接口类:
/*
* @description: 人民币,美元,日元,欧元,英镑 实现接口
* @author: diaogh
*/
public interface Money_ALL {
public BigDecimal showRMB(String money);
public BigDecimal showUS(String money);
public BigDecimal showJP(String money);
public BigDecimal showWS(String money);
public BigDecimal showYB(String money);
}
抽象空实现类:
/*
* @description: 抽象空实现方法,具体要实现那个功能,由具体的适配器去继承本类重载对应方法实现
* @author: diaogh
*/
public abstract class Money_ALL_Abstract implements Money_ALL {
@Override
public BigDecimal showRMB(String money) {
return null;
}
@Override
public BigDecimal showUS(String money) {
return null;
}
@Override
public BigDecimal showJP(String money) {
return null;
}
@Override
public BigDecimal showWS(String money) {
return null;
}
@Override
public BigDecimal showYB(String money) {
return null;
}
}
美元适配器:
/*
* @description: 美元接口适配器,仅实现Money_ALL_Abstract 中,美元展示的具体功能
* @author: diaogh
*/
public class Money_US_Adatper extends Money_ALL_Abstract {
//源类对象
private Money_RMB money_rmb;
//构造方法中传入源类对象
public Money_US_Adatper(Money_RMB money_rmb){
this.money_rmb = money_rmb;
}
//仅实现美元展示接口
public BigDecimal showUS( String money) {
BigDecimal bigDecimal = new BigDecimal(money);
//现在人民币和美元汇率是 6.4:1
System.out.println("账户余额:" + bigDecimal.divide(new BigDecimal("6.4")) +"美元");
return bigDecimal;
}
}
测试方法及效果:
public static void main(String[] args) {
System.out.println("接口适配器模式");
Money_US_Adatper implAdatper = new Money_US_Adatper(new Money_RMB() );
implAdatper.showUS("100");
}
总结:
类适配模式:需要实现的目标功能抽象成接口方法,适配器中通过继承获取源类方法,进行适配来实现目标功能
对象适配模式:需要实现的目标功能抽象成接口方法,适配器中通过构造器获取源类方法,进行适配来实现目标功能,同时也可以重载源类方法
接口适配模式:所有的待实现功能添加到接口当中,同时用抽象类去空实现接口中的功能,具体的实现交给具体的功能适配器继承实现,该功能适配器的构造方法中传入源类对象,然后重写父类对应功能方法。