啥玩意叫适配器模式呢
当家庭电压220v太大不适合 手机或者电脑充电的时候,手机充电器和 电脑充电器就必须要 把 220v电压 转换成 自己能用的电压,那么这里手机充电器和电脑充电器就相当于一个电压的适配器,如下如
适配器模式 - 对象适配器
public class ObjectAdapater {
public static void main(String[] args) {
Voltage220V v = new Voltage220V();
IAdapater adapater5v = new PhoneV( v);
adapater5v.outputV();
IAdapater adapater20v = new ComputerV( v);
adapater20v.outputV();
}
}
/**
* 家庭电压220v
*/
class Voltage220V{
int output220V(){
return 220;
}
}
interface IAdapater{
/**
* 输出5v
* @return
*/
int outputV();
}
//电脑电压5v
class ComputerV implements IAdapater{
Voltage220V voltage220V;
public ComputerV(Voltage220V voltage220V) {
this.voltage220V = voltage220V;
}
@Override
public int outputV() {
int v= voltage220V.output220V();
//......一些列转换得到5
System.out.println(String.format("家庭 电压 %d -> 电脑电压 %d " ,v,trans(v)));
return 5;
}
private int trans(int v){
System.out.println(v + " v电压 经过一些列转换操作.......");
return 5;
}
}
/**
* 手机充电电压 6V
*/
class PhoneV implements IAdapater{
Voltage220V voltage220V;
public PhoneV(Voltage220V voltage220V) {
this.voltage220V = voltage220V;
}
@Override
public int outputV() {
int v= voltage220V.output220V();
//......一些列转换得到5
System.out.println(String.format("家庭 电压 %d -> 手机充电电压 %d " ,v,trans(v)));
return v;
}
private int trans(int v){
System.out.println(v + " v电压 经过一些列转换操作.......");
return 6;
}
}
适配器模式 - 类适配器
public class ClassAdapater {
public static void main(String[] args) {
IAdapatee adapater5v = new ComputerV();
adapater5v.outputV();
IAdapatee adapater20v = new PhoneV();
adapater20v.outputV();
}
}
interface IAdapatee{
/**
* 输出5v
* @return
*/
int outputV();
}
/**
* 家庭电压220v
*/
class Voltagee220V{
int output220V(){
return 220;
}
}
//电脑电压5v
class ComputerV extends Voltagee220V implements IAdapatee{
@Override
public int outputV() {
int v= output220V();
//......一些列转换得到5
System.out.println(String.format("家庭 电压 %d -> 电脑电压 %d " ,v,trans(v)));
return v;
}
private int trans(int v){
System.out.println(v + " v电压 经过一些列转换.......");
return 5;
}
}
/**
* 手机电压电压
*/
class PhoneV extends Voltagee220V implements IAdapatee{
@Override
public int outputV() {
int v= output220V();
//......一些列转换得到5
System.out.println(String.format("家庭 电压 %d -> 手机电压 %d " ,v,trans(v)));
return v;
}
private int trans(int v){
System.out.println(v + " v电压 经过一些列转换.......");
return 6;
}
}
这两种适配器都会输出:
220 v电压 经过一些列转换…
家庭 电压 220 -> 电脑电压 5
220 v电压 经过一些列转换…
家庭 电压 220 -> 手机电压 6
类适配器 和 对象适配器有什么 区别呢?
我们可以看到 ,类适配器中,因为都继承了 Voltagee220V ,所以手机适配器和 电脑适配器都可以访问家庭电压的 220v,事实上,这是不太好的,但是对象适配器就不会出现这种问题
Spring 源码上体现 适配器模式的地方