例如:你需要在欧洲国家使用美国制造的笔记本,你就可能需要使用一个交流电的适配器。它位于美式插头和欧式插头中间,作用是将欧式插座转换成美式插座,好让美式插头可以插进这个插座得到电力。
OO适配器和真实世界中的适配器扮演的角色一样:将一个接口转换成另外一个接口,以符合客户的期望。
客户使用适配器的过程如下:
1.客户通过目标接口调用适配器的方法对适配器发出请求。
2.适配器使用被适配者接口把请求转换成被适配者的一个或多个调用接口
3.客户接收到调用的结果,但并未察觉这一切是适配器在起转换使用 22:28
适配器模式:将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。
public interface Duck{
public void quack();
public void fly();
}
绿头鸭是鸭子的子类
public class MallardDuck implements Duck{
public void quack(){
System.out.println("Quack");
}
public void fly(){
System.out.println("I'm flying");
}
}
最新的街头玩禽
public interface Turkey{
public void gobble();//火鸡不会呱呱叫,只会咯咯叫
public void fly();//火鸡会飞,但飞不远
}
public class WildTurkey implementsTurkey{
public void gobble(){
System.out.println("Gobble gobble");
}
public void fly(){
System.out.println("I'm flying a short distance");
}
}
现在用一个火鸡来冒充鸭子对象。
public class TurkeyAdapter implements Duck{//首先要实现想转换成的类型接口,也就是你的客户所期望的接口
Turkey turkey;
public TurkeyAdapter(Turkey turkey){
this.turkey = turkey;
}
public void quack(){
turkey.gobble();
}
public void fly(){
for(int i = 0;i < 5;i++){
thurkey.fly();
}
}
}
测试适配器
public class DuckTestDriver{
public static void main(String[] str){
MallardDuck duck = new MallardDuck();//先创建一只鸭子
WildTurkey turkey = new WildTurkey();//创建一只火鸡
Duck turkeyAdapter = new TurkeyAdapter(turkey);//把火鸡放进鸭子适配器中使其看起来是个鸭子
}
}