适配器模式
将一个类的接口转接成用户所期待的。一个适配使得因接口不兼容而不能在一起工作的类工作在一起,做法是将类别自己的接口包裹在一个已存在的类中。
优点:
1、可以让任何两个没有关联的类一起运行。
2、提高了类的复用。
3、增加了类的透明度。
4、灵活性好。
缺点:
1、过多地使用适配器,会让系统非常零乱,不易整体进行把握。比如,明明看到调用的是 A 接口,其实内部被适配成了 B 接口的实现,一个系统如果太多出现这种情况,无异于一场灾难。因此如果不是很有必要,可以不使用适配器,而是直接对系统进行重构。
2、由于 JAVA 至多继承一个类,所以至多只能适配一个适配者类,而且目标类必须是抽象类。
实例:
一个MacBook笔记本只支持三插头的。但是我们的墙角只有一个两插头的插座,
所以需要一个转换头(适配器),将两插头变为三插头,好让我们笔记本使用
/**
* Created by malei on 2016/12/5.
*/
public class MacBook {
private ThreePlug plug;
public MacBook(ThreePlug plug){
this.plug = plug;
}
//充电
public void charge(){
System.out.println("使用三相电流供电");
plug.powerwith3();
}
public static void main(String[] args){
Adapter_2to3 adapter = new Adapter_2to3();
MacBook book = new MacBook(adapter);
book.charge();
}
}
/**
* Created by malei on 2016/12/5.
* 三插头的接口
*/
public interface ThreePlug {
//给电
void powerwith3();
}
/**
* Created by malei on 2016/12/5.
* 国标二相插座,即需要适配的类(Adaptee)
* 墙上的插座居然是两相的
*/
public class GBTwoPlug {
public void powerwith2(){
System.out.println("使用二相电流供电");
}
}
/**
* Created by malei on 2016/12/5.
* 二相转三相的适配器(Adapter)
*/
public class Adapter_2to3 extends GBTwoPlug implements ThreePlug{
@Override
public void powerwith3() {
Log.show("适配器启动");
this.powerwith2();
}
}