适配器模式
适配器模式介绍
适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。举个简单的例子,现如今许多智能手机为了减小空间的浪费,逐渐取消了3.5mm圆孔的耳机孔,只保留了一个充电和插耳机通用的type-c孔,那么为了能让我们圆形耳机孔能适配type-c口,我们只需要买一个转接头就能将圆孔转换成type-c口就能正常使用圆孔耳机了。适配器适用于以下几种业务场景:
1、已经存在的类,它的方法和需求不匹配的情况。
2、适配器模式不是软件设计阶段考虑的设计模式,而是随着软件维护,由于不同产品、不同厂家造成功能类似而接口不相同情况下的解决方案。
适配器模式案例一
下面通过代码展示一下3.5mm圆形耳机插口通过适配器转成type-c的耳机插口,首先编写圆形插口耳机类CircleEarphone
/**
* @author: Winston
* @createTime: 2021/6/28
*
* 圆形耳机,表示只能插圆形的手机
*/
public class CircleEarphone {
public void insertCircle(){
System.out.println("圆形耳机插头,能插入圆形耳机孔");
}
}
目标接口TypeC,也就是客户想要的功能
public interface TypeC {
/**
* 能插入type-c耳机孔的头
*/
public void insertTypeC();
}
圆形插头的适配器Adapter,也就是把圆形插头转成type-c插头的适配器,这里有两种形式实现,第一种是类适配器,第二种是方法适配器。
/**
* @author: Winston
* @createTime: 2021/6/28
*
* 圆形耳机的适配器实现1,类适配器,通过集成和实现接口的方式,将圆形插头->type-c插头
*/
public class CircleAdapter1 extends CircleEarphone implements TypeC {
@Override
public void insertTypeC() {
// 调用父类方法
insertCircle();
System.out.println("使用圆口适配器,将圆形耳机插口转成type-c耳机插口");
}
}
/**
* @author: Winston
* @createTime: 2021/6/28
*
* 圆形耳机的适配器实现二,方法适配器,通过构造方法的形式,将圆形插头->type-c插头
*/
public class CircleAdapter2 implements TypeC {
// 直接关联被适配类
private CircleEarphone circleEarphone;
// 通过构造函数传入具体需要适配的被适配类对象
public CircleAdapter2(CircleEarphone circleEarphone) {
this.circleEarphone = circleEarphone;
}
@Override
public void insertTypeC() {
// 这里是使用委托的方式完成特殊功能
circleEarphone.insertCircle();
System.out.println("使用圆口适配器,将圆形耳机插口转成type-c耳机插口");
}
}
编写测试类typc-c耳机插口的手机:
/**
* @author: Winston
* @createTime: 2021/6/28
*
* 测试类,type-c耳机口的手机
*/
public class TypeCMobile {
public static void main(String[] args) {
System.out.println("==================第一种适配器:类适配器=====================");
CircleAdapter1 adapter1 = new CircleAdapter1();
adapter1.insertTypeC();
System.out.println("我是type-c耳机孔的智能手机,插入成功");
System.out.println("==============