定义
适配器模式:将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。
适配器模式一般有以下三种角色:
● Target目标角色
该角色定义把其他类转换为何种接口,也就是我们的期望接口,例子中的UniversalPort接口就是目标角色。
● Adaptee源角色
你想把谁转换成目标角色,这个“谁”就是源角色,它是已经存在的、运行良好的类或对象,经过适配器角色的包装,它会成为一个崭新、靓丽的角色。例中的ApplePhone和AndroidPhone就是源角色
● Adapter适配器角色
适配器模式的核心角色,其他两个角色都是已经存在的角色,而适配器角色是需要新建立的,它的职责非常简单:把源角色转换为目标角色,怎么转换?通过继承或是类关联的方式。
案例
/**
* 苹果手机接口
*/
public interface ApplePhonePort {
void applePort();
}
/**
* 苹果手机
*/
public class ApplePhone implements ApplePhonePort {
@Override
public void applePort() {
System.out.println("This is Apple phone port...");
}
}
/**
* 安卓手机接口
*/
public interface AndroidPhonePort {
void androidPort();
}
/**
* 安卓手机
*/
public class AndroidPhone implements AndroidPhonePort {
@Override
public void androidPort() {
System.out.println("This is Android phone port...");
}
}
/**
* 万能手机接口(Target类)
*/
public interface UniversalPort {
//接口
void port(String type);
}
/**
* 手机接口适配器
*/
public class PortAdapter implements UniversalPort {
private ApplePhone applePhone = new ApplePhone();
private AndroidPhone androidPhone = new AndroidPhone();
@Override
public void port(String type) {
if ("Iphone".equalsIgnoreCase(type)) {
applePhone.applePort();
} else if ("android".equalsIgnoreCase(type)) {
androidPhone.androidPort();
} else {
System.out.println("other port...");
}
}
}
public class AdapterPatternDemo {
public static void main(String[] args) {
PortAdapter adapter = new PortAdapter();
adapter.port("Iphone");
adapter.port("android");
}
}