目录
一、适配器模式的定义
将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。
有类适配器和对象适配器之别。
二、类图
对象适配器类图
三、对象适配器例子
场景描述:客户需要一些鸭子,但是你的农场里面鸭子数量不够,就需要火鸡去冒充(这例子有点缺德...),不能光明正大的去 冒充,就需要一个适配器(包装一下火鸡,使其看上去像鸭子)去干这事
1、目标接口(鸭子接口)
public interface Duck {
public void quack();
public void fly();
}
2、目标接口实现类(绿头鸭)
public class MallardDuck implements Duck {
@Override
public void quack() {
System.out.println("Quack");
}
@Override
public void fly() {
System.out.println("I'm flying");
}
}
3、被适配者接口(火鸡)
public interface Turkey {
public void gobble();
public void fly();
}
4、被适配者实现类(野火鸡)
public class WildTurkey implements Turkey {
@Override
public void gobble() {
System.out.println("Gobble gobble");
}
@Override
public void fly() {
System.out.println("I'm flying a short distance");
}
}
5、适配器(实现了目标接口,和被适配者组合(Turkey火鸡),所有的请求会委托给Turkey)
public class TurkeyAdapter implements Duck {
Turkey turkey;
public TurkeyAdapter(Turkey turkey) {
this.turkey = turkey;
}
@Override
public void quack() {
turkey.gobble();
}
@Override
public void fly() {
for (int i = 0; i < 5; i++) {
turkey.fly();
}
}
}
6、测试类
public class AdapterTest {
public static void main(String[] args) {
Turkey turkey = new WildTurkey();
Duck duck = new TurkeyAdapter(turkey);
duck.quack();
duck.fly();
}
}
7、后续:(1)类适配器和对象适配器有何区别,怎么实现
(2)适配器模式和代理模式有何区别
文章例子参考:Head First设计模式中的第7章适配器模式和外观模式