需求:现有一个电脑只有USB口,想连接网线上网,但没有网线口,这时需要USB转网线的转换器,即适配器
直观理解就是使原来不能一起相互工作(接口不兼容)的两个功能通过Adapter兼容在一起。
适配器类型分为:类适配器(继承关系) 和 对象适配器(组合关系)
类适配器的缺点:对Java, C#等不支持多重类继承的语言,一次只能适配一个适配类,不同同时适配多个
对象适配器的优点:一个对象适配器可以把多个不同的适配者适配到同一个目标
这里有:
电脑
网线
适配器
电脑类代码如下
package com.xianyu.adapter2;
/**
* @author xianyu
* @version 1.0
* @date 2020/3/13 20:07
* 客户端类,想上网,插不上网线
*/
public class Computer {
public void net(NetToUsb adapter){
//上网的具体实现,找一个转接头
adapter.handleRequest();
}
}
网线类代码如下
package com.xianyu.adapter2;
/**
* @author xianyu
* @version 1.0
* @date 2020/3/13 20:06
* 要被适配的类:网线
*/
public class Adaptee {
public void request(){
System.out.println("链接网线上网");
}
}
适配器的抽象实现
package com.xianyu.adapter2;
/**
* @author xianyu
* @version 1.0
* @date 2020/3/13 20:09
* 接口转化器的抽象实现
*/
public interface NetToUsb {
// 把网线插到usb上
public void handleRequest();
}
第一种适配器:继承 类适配器
package com.xianyu.adapter2;
/**
* @author xianyu
* @version 1.0
* @date 2020/3/13 20:10
* 真正的适配器 需要链接USB 链接网线
* 继承 类适配器
*/
public class Adapter extends Adaptee implements NetToUsb { // 类适配器,继承,只能继承一个
@Override
public void handleRequest() {
super.request(); //可以上网了
}
}
第二种适配器:组合关系 对象适配器
package com.xianyu.adapter2;
/**
* @author xianyu
* @version 1.0
* @date 2020/3/13 20:15
* 组合关系 对象适配器
*/
public class Adapter2 implements NetToUsb {
private Adaptee adaptee; //组合关系
public Adapter2(Adaptee adaptee){
this.adaptee = adaptee;
}
@Override
public void handleRequest() {
adaptee.request();
}
}
主函数
package com.xianyu.adapter2;
/**
* @author xianyu
* @version 1.0
* @date 2020/3/13 20:13
*/
public class Program {
public static void main(String[] args) {
// 类适配器
// Computer computer = new Computer(); // 电脑
// Adaptee adaptee = new Adaptee(); // 网线
// Adapter adapter = new Adapter(); // 转接器
// computer.net(adapter);
// 对象适配器
Computer computer = new Computer(); // 电脑
Adaptee adaptee = new Adaptee(); // 网线
Adapter2 adapter = new Adapter2(adaptee); // 转接器
computer.net(adapter);
}
}