1、接口与抽象类的区别
一个类可以实现多个接口智能继承一个抽象类;接口里的方法都是abstract public的而抽象类里的方法可以是private、protected、public或包访问权限;接口不可以有构造函数,而抽象类可以定义构造函数;接口不能有方法实现,而抽象类既能有抽象方法又可以有普通方法;接口里的只能定义final类型变量而抽象类任意类型都至此。
2、适配器模式:把一个类的接口转变为客户端所期待的目标接口;
适配器模式的角色:
1)、源角色:需要被适配的接口;
2)、目标接口:客户端所期待的接口;
3)、适配器角色:适配器将源角色转换为目标接口,是适配器模式的核心,一定是一个具体的类;
简单理解:有一个已经被实现的源接口(源角色),现在客户端期望的到一个目标接口,该接口中的部分方法和源角色中的部分方法相同,因此我们可以引入适配器角色来实现目标接口同时又继承源角色的实现类,从而的到一个客户端所期待的接口。
适配器模式类型:类适配器模式和对象适配器模式;
类适配器模式 ,代码解释如下:
/**源接口**/
interface Source{
public void fun1();
public void fun2();
}
/**源接口的实现类**/
public class SourceImp implements Source{
public void fun1(){};
public void fun2(){};
}
/**目标接口**/
public interface Target{
public void fun1();
public void fun2();
public void fun3();
}
/**
适配器类仅实现fun3方法,fun1、fun2方法可以继承SourceImp类
**/
public class Adapter extends SourceImp implements Target{
public void fun3(){};
}
类适配器和对象适配器的区别:对象适配器不通过继承的方式的到目标接口,而是通过委派的方式实现,代码解释如下:
/**源接口**/
interface Source{
public void fun1();
public void fun2();
}
/**源接口的实现类**/
public class SourceImp implements Source{
public void fun1(){};
public void fun2(){};
}
/**目标接口**/
public interface Target{
public void fun1();
public void fun2();
public void fun3();
}
/**
适配器类仅实现fun3方法,在适配类中引入源接口的实现类,从而将目标接口的方法实现委派到源接口的实现类上
**/
public class Adapter implements Target{
private SourceImp source = new SourceImp();
public void fun1(){
this.source.fun1();
}
public void fun2(){
this.souce.fun2();
}
public void fun3(){};
}