本文以一只残废狗为例,狗本身应该有吃和跑两个能力,但是该狗只有吃的能力,通过适配器模式实现狗可以跑的功能.
1. 类适配器
1.1 先创建一个狗的接口,具有跑和吃两个方法
/**
* 定义狗接口,具备2个功能
* 1- 狗能跑
* 2- 狗能吃
*/
public interface Dog {
public void run();
public void eat();
}
1.2 实际有残疾狗只能吃
/**
* 定义残废狗
* 残废狗只能吃
*/
public class DisabledDog {
public void eat(){
System.out.println("Dog can eat!");
}
}
1.3 残疾狗的适配器
/**
* 创建适配器
* 1- 残废狗使用了适配器(安装假肢)
* 2- 残废狗实现了狗类接口
*/
public class Adapter extends DisabledDog implements Dog{
@Override
public void run() {
System.out.println("Dog can run!");
}
// 残废狗本身就能吃,所以残废狗不需要实现狗接口的吃方法
}
1.4 残废狗使用适配器
/**
* 定义使用类
* 残废狗尝试跑和吃
*/
public class Play {
public static void main(String[] args) {
// 残废狗装载适配器(假肢)
Dog dog = new Adapter();
dog.eat();
// 残废狗尝试跑
dog.run();
}
}
2. 方法适配器
2.1 残疾狗的适配器
将1.3的适配器修改
/**
* 创建适配器
* 1- 残废狗使用了适配器(安装假肢)
* 2- 残废狗实现了狗类接口
*/
public class AdapterBox implements Dog{
// 残废狗来看医生
private DisabledDog disabledDog;
// 给残废狗使用的适配器
public AdapterBox(DisabledDog disabledDog){
super();
this.disabledDog = disabledDog;
}
// 狗医生通过适配器帮助残废狗实现跑
@Override
public void run() {
System.out.println("Dog can run!");
}
// 狗自己实现吃
@Override
public void eat() {
disabledDog.eat();
}
}