适配者模式:将一个类的接口,转换成客户期望的另一个接口。适配器将原本接口不兼容的类也可以互相配合使用。想象手机充电器,将220直流电转化为5V的直流电,适配器就是充当这个充电器的角色。
其实这个充电器的例子也是不大准确的,真正使用的话,也是这句话,将一个类的接口,转换为客户期待的另一个接口。也就是说要转化为客户需要的接口。
所以一般来说这个适配器:1.实现了客户的接口,因为这样可以转换为客户的接口。2.应该通过传入或者其他的办法将另一个接口或者类传入这个适配器,在这个适配器复写了接口的方法了做相应的处理,已便达到客户想要的需求。这样就可以将一个类或者接口转换成了客户的接口了。
比如这个例子:
有个机器,它只有两种操作,打开或者关闭;(实际的接口或者类)
public class Machine {
public void turnon()
{
System.out.println("turn on");
}
public void turnoff()
{
System.out.println("turn off");
}
}
客户想要一种新的操作方式,要求是以下的方法下对机器操作:(客户的接口)
public interface Machineoperate {
public void turnon_atsitution1();
public void turnff_atsitution1();
public void turnon_atsitution2();
public void turnff_atsitution2();
}
那里我们写一个适配器,客户可以通过这个适配器后能够进行他想要的操作:
public class Machineadapter implements Machineoperate{
private Machine a;
public Machineadapter(Machine a) {
this.a=a;
}
@Override
public void turnon_atsitution1() {
System.out.println(a.turnon()+"on turnon_atsitution1");
}
@Override
public void turnff_atsitution1() {
System.out.println(a.turnoff()+"on turnon_atsitution1");
}
@Override
public void turnon_atsitution2() {
System.out.println(a.turnon()+"on turnon_atsitution2");
}
@Override
public void turnff_atsitution2() {
System.out.println(a.turnoff()+"on turnon_atsitution2");
}
}
测试:
public static void main(String[] s)
{
Machineoperate a=new Machineadapter(new Machine());
a.turnon_atsitution1();
a.turnff_atsitution1();
a.turnon_atsitution2();
a.turnff_atsitution2();
}
结果如下:
turn on on turnon_atsitution1
turn off on turnon_atsitution1
turn on on turnon_atsitution2
turn off on turnon_atsitution2
目的就是将实际的接口转化为客户的接口,方法是需要实现客户的接口以便创建出客户的操作。