适配器主要功能就是一个小范围的转换工作,比如usb接口的笔记本需要连接针孔的键盘,那么就需要一个中间的转换器,把usb和针孔对接起来,中间这个对接的小部件就是适配器


适配器模式有两种实现方式:
1、直接转换类继承目标类,这种方式有类继承唯一限制的局限性,不利于扩展
/**
*目标连接对象,针孔键盘
*/
public class KeyBoard {
public void ZhenKong() {
System.out.println("键盘针孔");
}
}
// ==========================================
/**
* 适配器接口:usb连键盘上的针孔
*/
public interface Target {
//目标作用就是转换Usb成针孔连接
public void tranferUsbToZhenKong();
}
//==============================================
/**
* 适配器实现类:具体实现了Usb到针孔转换,与目标对象针孔键盘关联起来了,可以通过继承的方式关联,也可以通过注入的方式关联
* 本例采用继承方式
*/
public class Adapter extends KeyBoard implements Target {
@Override
public void tranferUsbToZhenKong() {
ZhenKong(); //当直接继承目标对象后,就具有了目标对象的方法,可以直接调用
}
}
//==============================================
/**
* 笔记本不能直接连针孔键盘,得通过中间转换器连接,模拟实际开发中第三方接口的限制,无法直接调用只能先转换再调用
*/
public void Usb(Target target)
{
target.tranferUsbToZhenKong();
System.out.println("笔记本Usb端口连适配器转换口");
}
// ================================
// 测试
@Test
public void func()
{
Computer computer=new Computer();
Target target=new Adapter();
computer.Usb(target);
}
2、适配器采用注入目标对象的方式
/**
*目标连接对象,针孔键盘
*/
public class KeyBoard {
public void ZhenKong() {
System.out.println("键盘针孔");
}
}
//=====================================
/**
* 适配器接口:usb连键盘上的针孔
*/
public interface Target {
//目标作用就是转换Usb成针孔连接
public void tranferUsbToZhenKong();
}
/**
* 适配器实现类:具体实现了Usb到针孔转换,与目标对象针孔键盘关联起来了,可以通过继承的方式关联,也可以通过注入的方式关联
* 本例采用注入目标对象方式
*/
public class Adapter implements Target {
private KeyBoard keyBoard;
public Adapter(KeyBoard keyBoard)
{
this.keyBoard=keyBoard; //通过构造函数注入
}
@Override
public void tranferUsbToZhenKong() {
keyBoard.ZhenKong(); //通过适配器来调用目标对象的方法
}
}
//==================================
/**
* 笔记本不能直接连针孔键盘,得通过中间转换器连接,模拟实际开发中第三方接口的限制,无法直接调用只能先转换再调用
*/
public void Usb(Target target)
{
target.tranferUsbToZhenKong();
System.out.println("笔记本Usb端口连适配器转换口");
}
//=====================================
@Test
public void func()
{
Computer computer=new Computer();
KeyBoard keyBoard=new KeyBoard();
Target target=new Adapter(keyBoard);
computer.Usb(target);
}
