适配器模式分为类的适配器模式和对象的适配器模式。类的适配器模式是通过继承的方式实现,而对象的适配器模式是通过组合的方式实现。
在java面向对象中,是推荐多用组合,少用继承的,两者的区别还是很多的,例如:组合在运行期确定,继承在编译器确定;组合是松耦合,继承是紧耦合等等。当然具体场景还是得具体分析。
适配器模式的使用场景是,系统需要使用已经存在的类,但是此类并不能完全满足用户或者其他的需求,而且尽量不要去修改此类,此时,此模式就派上用场了,达到了很好的复用效果。
如下代码中:
类Adaptee就是被适配者,代表需要复用的类
接口Target就是目标类,需要实现的功能
类Adaptor就是适配器类
/**
* 被适配类
*/
public class Adaptee {
public Adaptee(){
}
public void eat(){
System.out.println("eat...");
}
}
/**
* 目标类
*/
public interface Target {
public void eat();
public void sleep();
}
/**
* 适配器类
*/
public class Adaptor implements Target {
private Adaptee adaptee;
public Adaptor(Adaptee adaptee){
this.adaptee = adaptee;
}
@Override
public void eat() {
adaptee.eat();
}
@Override
public void sleep() {
System.out.println("sleep...");
}
}