概念理解
适配器是将一个接口转换为另一个接口的一种实现,它是一种结构型模式。原接口和目标接口本来不兼容,通过适配器类,可以使用目标接口来调用原接口的方法。
场景描述
每个国家的电压是不一样的, 中国室内的电压一般是220v,美国,日本的电压是110v,假设笔记本需要的电压是12.6v 这时,就需要适配器,将室内电压转为笔记本需要的电压。
设计一:对象适配器
对象适配器模式是适配器实现目标接口,持有对原接口的引用。
public interface ChinaVoltageInterface {
void use220v();
}
public class ChinaVoltageInterfaceImpl implements ChinaVoltageInterface {
@Override
public void use220v() {
System.out.println("this is 220v");
}
}
public interface NotebookVoltageInterface {
void use12v();
}
public class ChinaVoltageToNotebookAdapter implements NotebookVoltageInterface {
private ChinaVoltageInterface chinaVoltageInterface;
public ChinaVoltageToNotebookAdapter(ChinaVoltageInterface chinaVoltageInterface) {
this.chinaVoltageInterface=chinaVoltageInterface;
}
@Override
public void use12v() {
System.out.println("notebook use 12v ");
System.out.println(" notebook voltage use china voltage");
chinaVoltageInterface.use220v();
}
}
public class TestAPP {
public static void main(String[] args) {
ChinaVoltageInterface chinaVoltageInterface = new ChinaVoltageInterfaceImpl();
NotebookVoltageInterface notebookVoltageInterface = new ChinaVoltageToNotebookAdapter(chinaVoltageInterface);
notebookVoltageInterface.use12v();
}
}
设计二:类适配器模式
类适配器模式是适配器继承原接口实现类,然后实现目标接口。
public class ChinaVoltageToNotebookAdapter2 extends ChinaVoltageInterfaceImpl implements NotebookVoltageInterface {
@Override
public void use12v() {
System.out.println("notebook use 12v ");
System.out.println(" notebook voltage use china voltage");
super.use220v();
}
}
public class TestAPP {
public static void main(String[] args) {
NotebookVoltageInterface notebookVoltageInterface =new ChinaVoltageToNotebookAdapter2();
notebookVoltageInterface.use12v();
}
}
enumeration转iterator实例:使用适配器
public class EnumerationIterator implements Iterator {
private Enumeration enumeration;
public EnumerationIterator(Enumeration enumeration) {
this.enumeration = enumeration;
}
@Override
public boolean hasNext() {
return enumeration.hasMoreElements();
}
@Override
public Object next() {
return enumeration.nextElement();
}
@Override
public void remove() {
throw new UnsupportedOperationException();
}
}
适配器与装饰器的区别
装饰器是在原接口的基础上增加新的操作,来实现不同的功能,适配器是原有接口的一个伪装,把原接口当做目标接口来使用,并不会增加新的操作。
代码实例https://github.com/jxl198/designPattern/tree/master/adapter
网友评论