适配器模式
适配器模式,又叫变压器模式,他的功能是将一个类的接口变成客户端所期望的另一种接口从而使得原本因为接口不匹配而导致无法在一起工作的两个类能够在一起工作,属于结构性设计模式。
适配器模式一般包含三种角色:
- 目标角色(Target): 也就是我们期望的接口;
- 源角色(Adaptee):被适配的,存在于系统中,内容满足客户需求(需要转换),但接口不匹配的接口实例
- 适配器(Adapter):将源角色(Adaptee)转换为目标角色(Target)的类实例
适配器模式有三种形式:类适配器,对象适配器、接口适配器
类适配器:
类适配器的原理就是通过继承来实现适配器功能:让适配器Adapter实现目标角色Target接口,同时继承源角色Adaptee,这样适配器就同时具备Target和Adaptee的特性,就可以将两者进行转化。
package com.jdwa.adapterv1;
/**
* Adaptee
*/
public class AC220 {
public int outputAC220(){
int output = 220;
System.out.println("输出电压:"+output+"V");
return output;
}
}
package com.jdwa.adapterv1;
public interface DC5 {
int outDC5();
}
package com.jdwa.adapterv1;
public class PowerAdapter extends AC220 implements DC5 {
@Override
public int outDC5() {
int adapteeInput = super.outputAC220();
int targetOutput = adapteeInput/44;
System.out.println("输入:"+adapteeInput+";输出DC"+targetOutput+"V");
return targetOutput;
}
}
package com.jdwa.adapterv1;
public class Client {
public static void main(String[] args) {
DC5 dc5 = new PowerAdapter();
dc5.outDC5();
}
}
对象适配器:
对象适配器的原理就是通过组合来实现适配器功能。具体做法:让Adapter实现Target接口,然后内部持有Adaptee实例,然后让Target接口规定方法内转换Adaptee
代码只需要修改适配器类:
package com.jdwa.adapterv1;
public class ObjectPowerAdapter implements DC5{
private AC220 ac220;
public ObjectPowerAdapter(AC220 ac220){
this.ac220 = ac220;
}
@Override
public int outDC5() {
int input = ac220.outputAC220();
int output = input/44;
System.out.println("AC220:"+input+";DC5:"+output);
return output;
}
}
接口适配器:
接口适配器的关注点与类适配器与对象适配器的不太一样,类适配器与对象适配器着重于将系统存在的一个角色(Adaptee)转化成目标接口(Target)所需内容,而接口适配器的使用场景是解决接口方法过多,如果直接实现接口,那么类会多出许多空实现的方法,类显得很臃肿。此时,使用接口适配器就能让我们只实现我们需要的接口方法,目标更清晰。
说的直白点,就是在接口方法很多时,采用对象适配器,只不过其他的方法是默认实现。这里就不再用代码展示了。
网友评论