大家还记得装饰者模式吗?我们将对象包装起来,赋予他们新的职责。现在则有不同的目的:让对象包装起来,而不在像自己了。那么为什么要这么做呢?因为其目的就是把类的接口转换成想要的接口。
就好像大家熟知的usb充电器一样,苹果不适用的,那么就需要一个转换的过程把这个usb的充电器转成苹果手机的充电口。
适配器模式
还记得设计模式随笔-策略模式中的鸭子吧?
//鸭子的接口
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 implements Turkey{
public void gobble(){
System.out.println("Gobble");
}
public void fly(){
System.out.println("I'm flying short");
}
}
现在假设鸭子对象紧缺,你需要用火鸡对象来冒充。但是火鸡对象的直接使用显然是不合适的。于是就要写一个适配器了。
火鸡适配器:
public class TurkeyAdapter implements Duck{
Turkey turkey;
public TurkeyAdapter(Turkey turkey){
this.turkey = turkey;
}
public void quack(){
turkey.gobble();
}
public void fly(){
turkey.fly();
}
}
适配器解析如下图:
图片截取-《Head First设计模式》
适配器模式:将一个类的接口,转换成客户期望的另外一个接口。适配器让原本的接口不兼容的类可以合作无间。
我们现在来看看它的类图吧:
图片截取-《Head First设计模式》
适配器模式充满着良好的设计原则:使用对象组合,以修改的接口包装被适配者,这样做的好处是可以适配被适配者的所有子类了。