一、说明/设计原则
- 1、说明:适配器模式将一个类的接口,转换成客户期望的另一个接口,适配器让原来接口不兼容的类可以合作无间。
二、实例
2-1、A接口与实现类
/**
* @program: HeadFirst
* @description:鸭子接口
* @author: jiawen.tang
**/
public interface Duck {
void quack();
void fly();
}
package com.tjw.headFirst.sevenshipeiqi.one;
/**
* @program: HeadFirst
* @description:鸭子实现类
* @author: jiawen.tang
**/
public class MallardDuck implements Duck {
@Override
public void quack() {
System.out.println("小鸭子呱呱叫");
}
@Override
public void fly() {
System.out.println("小鸭子飞起来");
}
}
2-2、B接口与实现类
package com.tjw.headFirst.sevenshipeiqi.one;
/**
* @program: HeadFirst
* @description:火鸡接口
* @author: jiawen.tang
**/
public interface Turkey {
/**
* 咯咯叫
*/
void gobble();
void fly();
}
package com.tjw.headFirst.sevenshipeiqi.one;
/**
* @program: HeadFirst
* @description:火鸡实现类,野火鸡
* @author: jiawen.tang
**/
public class WildTurkey implements Turkey {
@Override
public void gobble() {
System.out.println("火鸡的咯咯叫,与众不同的叫声");
}
@Override
public void fly() {
System.out.println("火鸡也能飞起来了");
}
}
2-3、B冒充A的适配器
package com.tjw.headFirst.sevenshipeiqi.two;
import com.tjw.headFirst.sevenshipeiqi.one.Duck;
import com.tjw.headFirst.sevenshipeiqi.one.Turkey;
/**
* @program: HeadFirst
* @description:火鸡适配器
* 用火鸡来冒充鸭子
* 这个适配器也是一个鸭子的实现类,这样才能拥有鸭子一样的行为
* @author: jiawen.tang
**/
public class TurkeyAdapter implements Duck {
Turkey turkey;
public TurkeyAdapter(Turkey turkey){
this.turkey = turkey;
}
@Override
public void quack() {
turkey.gobble();
}
@Override
public void fly() {
// 火鸡飞行的没鸭子长,所以5次抵消一次
for (int i = 0; i < 5; i++) {
turkey.fly();
}
}
}
三、总结
* 1、适配器好比是一个中转站,将一个接口转换成另一个接口。
* 2、一个适配器需要做的工作跟目标接口的大小成正比,但是相比改造接口来说,多一个适配器。
* 3、一般来说一个适配器包装一个类,如果需要一个适配器包装多个类的话就需要使用外观模式。
* 4、装饰者设计模式:意图 将一个接口转成另一个接口
* 适配器设计模式:意图 不改变接口,但加入责任
*
类是最节省的办法。
参考资料 Java设计模式