适配器 :是一种比较流行的设计模式,从字面意思的理解就是一个对象去适应另一个对象。定义为:将一个接口装换成客户希望的另一个接口,解决了原本不兼容的接口不能在一起工作的问题,从而使得他们可以一起工作。
适配器设计条件:
1、源接口
2、目标接口
3、适配器类,适配器中必须创建一个源接口的引用变量,构造方法中传参给源接口引用赋值。
source:
/**
* PS2接口
* @author lobal
*
*/
public interface PS2Port {
public void workWithPS2();
}
Target:
/**
* USB接口,U口
* @author lobal
*
*/
public interface USBPort {
public void workWithUSB();
}
Adapter:
/**
* 对象适配器
* 将PS2接口装换成USB接口
* 所以此类类型是USB接口(implements USBPort) + 成员变量ps2Port
* @author lobal
*
*/
public class PS2ToUSB implements USBPort{
private PS2Port ps2Port;
public PS2ToUSB(PS2Port ps2Port) {
this.ps2Port = ps2Port;
}
public void workWithUSB() {
System.out.println("转换的关键在这里,本来是");
ps2Port.workWithPS2();
System.out.println("经过你的转换,现在是USB工作中");
}
}
适配器使用场景:
a、系统需要使用现有的类,而这些类的接口不符合系统的接口。
b、想要建立一个可以重用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。
c、使用第三方组件,组件接口定义和自己定义的不同,不希望修改自己的接口,但是要使用第三方组件接口的功能。
d、数据库连接适配
适配器优缺点:
a、通过适配器,客户端可以调用同一接口,对客户端来说是透明的。这样做更简洁、更直接、更紧凑。
b、复用了现存的类,解决了现存类和复用环境不一致的问题。
c、将目标类和源类解耦,通过引入一个适配类重用源有的类,无需修改源代码。
d、一个对象适配器可以把多个源类适配到同一个目标类中。
/**
* 对象适配器
* 将PS2接口装换成USB接口
* 所以此类类型是USB接口(implements USBPort) + 成员变量ps2Port
* @author lobal
*
*/
public class PS2ToUSB implements USBPort{
private PS2Port ps2Port;
public PS2ToUSB(PS2Port ps2Port) {
this.ps2Port = ps2Port;
}
public void workWithUSB() {
System.out.println("转换的关键在这里,本来是");
ps2Port.workWithPS2();
System.out.println("经过你的转换,现在是USB工作中");
}
}