设计模式-适配器模式
将一个类的接口换成客户希望的另一个接口。Adaper模式使得原本由接口不兼容而不能一起工作的那些类可以在一起工作
1、角色分析:
- 目标接口:客户所期待的接口,目标可以具体的抽象的类,也可以是接口
- 需要适配的类:需要适配的类或者适配者类
- 适配器:通过包装一个需要适配的对象,把原来接口换成目标接口
比如:
- 电脑USB接口
- USB转换器
- 网线
我们的电脑需要插网线才能进行上网,但是现在很多电脑不能直接插网线,需要一个USB的转换器,将网线插转换器上进行上网如下图:
2、适配器的优点:
对象适配器的优点:
-
一个对象适配器可以把多个不同的适配者适配到同一个目标
-
可以适配一个适配者的子类。由于适配器和适配者之间的guanlian 关系,适配者的子类也可以通过该适配器进行适配
类适配器的缺点:
-
对于java、C#等不支持多继承的语言,一次最多只能适配一个适配者类,不能适配多个适配者
-
在java、C# 等语言中,类适配者模式中的目标抽抽象类只能为接口,不能为类,使其拥有一定局限性
3、上代码:
1、网线类
/**
* 功能描述
*要被适配的类 网线
* @author ZBQ
* @date 2022/03/31 15:10
* @des
*/
public class Adaptee {
public void request(){
System.out.println("连接网线上网");
}
}
2、转换器接口类
/**
* 接口转换器的抽象实现
*/
public interface NetToUSB {
//作用:处理请求
public void handlerrequest();
}
3、转换器接口实现类
3.1 对象适配类
/**
* 功能描述
对象适配类
*真正的适配器 需要连接USB 连接网线
*
* @author ZBQ
* @date 2022/03/31 15:15
* @des
*/
public class Adapter2 implements NetToUSB{
private Adaptee adaptee;
public Adapter2(Adaptee adaptee) {
this.adaptee = adaptee;
}
@Override
public void handlerrequest() {
adaptee.request();
}
}
3.2 类适配器类
/**
* 功能描述
*真正的适配器 需要俩姐USB 链接网线
*
* @author ZBQ
* @date 2022/03/31 15:15
* @des
*/
public class Adapter extends Adaptee implements NetToUSB{
@Override
public void handlerrequest() {
super.request();
}
}
4、电脑类
/**
* 功能描述
*客户端 想要上网 但是插不上网线
* @author ZBQ
* @date 2022/03/31 15:13
* @des
*/
public class Computer {
//我们的电脑需要连接上转换器才可以上网
public void net(NetToUSB adaper){
//上网的具体实现 找一个转接头
adaper.handlerrequest();
}
public static void main(String[] args) {
Computer computer = new Computer();
Adaptee adaptee = new Adaptee();
Adapter2 adapter = new Adapter2(adaptee);
computer.net(adapter);
}
}
运行结果:
可以查看我的CSDN博客地址设计模式之适配器模式