适配器继承或依赖已有的对象,实现想要的目标接口,消除由于接口不匹配所造成的类的兼容性问题;提高了类的复用,增加了类的透明度。
1、类适配器:
// 已有类
class Origin{
public void run(){
System.out.println("i am running");
}
}
// 扩展接口
interface ExpandInterface{
void swim();
}
// 适配器
class CustomAdaptor extends Origin implements ExpandInterface{
@Override
public void swim() {
System.out.println("i am swimming");
}
}
public class AdapterDemo {
public static void main(String[] args) {
CustomAdaptor adaptor = new CustomAdaptor();
adaptor.run();
adaptor.swim();
}
}
2、对象适配器模式(与静态代理类似):
class Origin{
public void run(){
System.out.println("i am running");
}
}
interface ExpandInterface{
void swim();
}
class CustomAdaptor implements ExpandInterface{
private Origin origin;
public CustomAdaptor() {
this.origin = origin;
}
public void run(){
this.origin.run();
}
@Override
public void swim() {
System.out.println("i am swimming");
}
}
public class AdapterDemo {
public static void main(String[] args) {
CustomAdaptor adaptor = new CustomAdaptor();
adaptor.run();
adaptor.swim();
}
}
3、接口适配器模式:不希望实现一个接口中所有的方法,可选择一个抽象类实现接口,然后继承该抽象类实现想实现的方法即可。
public interface ExpandInterface {
void show();
void hide();
void close();
void open();
}
public abstract class AbstractInterface implements ExpandInterfacen {
@Override
public void show() { }
@Override
public void hide() { }
@Override
public void close() { }
@Override
public void open() { }
}
public class Expand extends AbstractInterface {
@Override
public void show() {
super.show();
}
@Override
public void close() {
super.close();
}
}