适配器模式
是一种结构型设计模式,它能使接口不兼容的对象能够相互合作。实现时使用了构成
原则:适配器实现了其中一个对象的接口,并对另一个对象进行封装。所有流行的编程语言都可以实现适配器。
例子:单口榨汁机转换成双口榨汁机
设计模式原则优先使用组合,而不是继承。
所以首先在Adapter类中组合了OldJuicer字段。
Adapter实现新的榨汁机接口。(目的是为了实现新的方法)
public interface InewJuicer {
public String newPort(Fruit fruit1, Fruit banana);
}
public class OldJuicer {
public String onePort(Fruit fruit){
String str = fruit.getName() +"榨成汁。";
return str;
}
}
public class Adapter implements InewJuicer {
private OldJuicer oJuicer;
public Adapter() {
oJuicer = new OldJuicer();
}
public String newPort(Fruit fruit1, Fruit fruit2){
String str = "混合果汁机:"+oJuicer.onePort(fruit1) + oJuicer.onePort(fruit2);
return str;
}
}
public class Client {
public static void main(String[] args) {
InewJuicer newjuicer = new Adapter();
Apple apple = new Apple();
Banana banana = new Banana();
String str = newjuicer.newPort(apple,banana);
System.out.println(str);
}
}
总结
-
优点:
1、可以让任何两个没有关联的类一起运行。
2、提高了类的复用。
3、增加了类的透明度。
4、灵活性好。 -
缺点:
1、过多地使用适配器,会让系统非常零乱,不易整体进行把握。比如,明明看到调用的是 A 接口,其实内部被适配成了 B 接口的实现,一个系统如果太多出现这种情况,无异于一场灾难。因此如果不是很有必要,可以不使用适配器,而是直接对系统进行重构。
2、由于 JAVA 至多继承一个类,所以至多只能适配一个适配者类,而且目标类必须是抽象类。 -
使用场景:
有动机地修改一个正常运行的系统的接口,这时应该考虑使用适配器模式。