一看到适配器模式,给我的感觉就是,卧槽,这不就是代理模式么,仔细研究一番,还是有一点区别
上图上一部分是适配器模式,下一部分是代理模式
又百度找了找概念知识
适配器模式:旧的的接口业务满足不了客户端的需求,而旧的接口业务不能被完全重构(系统中还用的上),为了满足客户端新需求,新接口业务必须包含旧接口业务功能,同时可扩展满足客户端新需求
代理模式:为其他对象提供一种代理以控制对这个对象的访问,实际上还是调用被代理的业务
举一个简单一点的例子:
小王换了一台小米6,由于某种原因,小王未收到typeC的充电器,小王找到老王,老王给了小王一个TypeB的充电器,这也用不了啊,此时,拥有精通各种语言编写helloworld能力的小王,巴拉巴拉造出一个TypeB转TypeC的适配器,续上,顿时,只传来一声“TiMI”,小王满脸笑容
代码演示
接口
public interface TypeB {
//充电方法
String TypeBdoCharge();
}
实现类
public class TypeBImpl implements TypeB{
public String TypeBdoCharge(){
return "typeB";
}
}
适配器
public class TypeAdapter extends TypeBImpl{
public String typeCdoCharge() {
String typeB = this.TypeBdoCharge();
System.out.println("将typeB变为TypeC的过程......");
String typeC = typeB + "====>typeC";
return typeC;
}
}
客户端
public class Test {
public static void main(String[] args) {
System.out.println("买了一台小米6,没送充电器,只有typeB充电器");
System.out.println("扒拉扒拉造出个适配器:Adapter");
TypeAdapter typeAdapter = new TypeAdapter();
String type = typeAdapter.typeCdoCharge();
System.out.println(type+"续上!");
}
}
这是一个很简单的适配器(适配器模式的原理到此就结束了)
这个时候,小王的妈妈老潘打麻将赢了钱,给小王买了一台iPhone 11,坑爹的是,又没有送充电器。小王口吐芬芳,拿起了扳手,开始扒拉扒拉,造出了一个TypeB转TypeIOS适配器,续上。
代码实现
适配器
public class TypeAdapter extends TypeBImpl{
//typeB 转 typeC
public String typeCdoCharge() {
String typeB = this.TypeBdoCharge();
System.out.println("将typeB变为TypeC的过程......");
String typeC = typeB + "====>typeC";
return typeC;
}
//typeB 转 typeIOS
public String typeIOSdoCharge(){
String typeB = this.TypeBdoCharge();
System.out.println("将TypeB变为TypeIOS的过程......");
String typeIOS = typeB + "====>typeIOS";
return typeIOS;
}
}
客户端
public class Test {
public static void main(String[] args) {
System.out.println("又换了一台iPhone ,没有充电器,只有typeB");
System.out.println("找到了个转接头:Adapter");
String typeIos = typeAdapter.typeIOSdoCharge();
System.out.println(typeIos+"续上!");
}
}
代码和之前的代码实现类似,我是不是闲着没事做啊,同样的代码些两边
看下面例子:
小王现在拥有两部手机(小米6+iPhone 11),但是只有一个typeB充电器,现在解决了充电问题,最近小王又有点烦恼,电脑上有些小视频想要传到两部手机上去,没办法,小王只能掏出扳手,扒拉扒拉…
- 显然typeB只有充电功能,需要对其增强
public class TypeBEnhance extends TypeBImpl {
//TypeBImpl只有充电功能
public String TypeBdoCharge(){
return super.TypeBdoCharge();
}
public String TypeBTransportData(){
//传输数据功能
return "TypeBData";
}
}
- 现在只有typeB的充电功能和数据传输功能,小王还需要TypeB和TypeIOS的充电功能和数据传输功能,两个可以写在同一个适配器中,但为了代码低偶尔,易维护,这里我们分别写在不同的适配器中
TypeC
public interface TypeCInterface {
//充电功能
String typeCdoCharge();
//传输数据
String typeCTransportData();
}
public class TypeCAdapter extends TypeBEnhance implements TypeCInterface {
@Override
public String typeCdoCharge() {
String typeCharge = super.TypeBdoCharge();
System.out.println("小王扒拉扒拉充电功能......");
typeCharge = typeCharge+"====>typeCCharge";
System.out.println("TypeC充电适配器造成功,续上!");
return typeCharge;
}
@Override
public String typeCTransportData() {
String typeData = super.TypeBTransportData();
System.out.println("小王扒拉扒拉传输数据功能......");
typeData = typeData+"====>typeCData";
System.out.println("TypeC数据传输适配器造成功,接上");
return typeData;
}
}
附上typeC类图
TypeIOS
public interface TypeIOSInterfac{
//充电功能
String typeIOSdoCharge();
//传输数据功能
String typeIOSTransportData();
}
public class TypeIOSAdapter extends TypeBEnhance implements TypeIOSInterfac {
@Override
public String typeIOSdoCharge() {
String typeCharge = super.TypeBdoCharge();
System.out.println("小王扒拉扒拉充电功能......");
typeCharge = typeCharge+"====>typeIOSCharge";
System.out.println("TypeIOS充电适配器造成功,续上!");
return typeCharge;
}
@Override
public String typeIOSTransportData() {
String typeData = super.TypeBTransportData();
System.out.println("小王扒拉扒拉传输数据功能......");
typeData = typeData+"====>typeIOSData";
System.out.println("TypeIOS数据传输适配器造成功,接上");
return typeData;
}
}
附上TypeIOS类图
以上,两个适配器做好了
小王开始试试TypeC
public static void main(String[] args) {
TypeCAdapter typeCAdapter = new TypeCAdapter();
typeCAdapter.typeCdoCharge();//充电
typeCAdapter.typeCTransportData();//传输数据
}
结果可以用,小王贼高兴,打算今晚搓一顿
这里就不测试TypeIOS适配器了,肯定都能用