11.11
今天完成了高飞老师的实验81.
+----------------+ +----------------------+ +----------------+
| ICat | | CatDogAdapter | | IDog |
+----------------+ +----------------------+ +----------------+
| + catchMouse() |<------| - cat: ICat |------>| + bark() |
+----------------+ | - dog: IDog | +----------------+
^ | + catchMouse() | ^
| | + bark() | |
| +----------------------+ |
| |
+----------------+ +----------------+
| Cat | | Dog |
+----------------+ +----------------+
| + catchMouse() | | + bark() |
+----------------+ +----------------+
2.IDog.java
public interface IDog {
void bark();
}
具体实现类
Cat.java
public class Cat implements ICat {
@Override
public void catchMouse() {
System.out.println("猫抓老鼠:喵~ 抓到老鼠啦!");
}
}
Dog.java
public class Dog implements IDog {
@Override
public void bark() {
System.out.println("狗叫:汪汪汪!");
}
}
3. 双向适配器类
CatDogAdapter.java
public class CatDogAdapter implements ICat, IDog {
private ICat cat;
private IDog dog;
// 适配猫
public CatDogAdapter(ICat cat) {
this.cat = cat;
}
// 适配狗
public CatDogAdapter(IDog dog) {
this.dog = dog;
}
// 适配狗调用猫的方法
@Override
public void catchMouse() {
if (dog != null) {
System.out.print("狗学猫抓老鼠:");
// 这里可以添加狗模拟猫抓老鼠的具体实现
System.out.println("狗用爪子刨地模仿猫抓老鼠!");
} else if (cat != null) {
cat.catchMouse();
}
}
// 适配猫调用狗的方法
@Override
public void bark() {
if (cat != null) {
System.out.print("猫学狗叫:");
// 这里可以添加猫模拟狗叫的具体实现
System.out.println("猫发出低沉的吼声模仿狗叫!");
} else if (dog != null) {
dog.bark();
}
}
}
4. 测试类
AdapterTest.java
public class AdapterTest {
public static void main(String[] args) {
// 创建猫和狗实例
ICat cat = new Cat();
IDog dog = new Dog();
// 猫适配成狗
IDog catAdapter = new CatDogAdapter(cat);
System.out.println("=== 猫学狗叫 ===");
catAdapter.bark();
// 狗适配成猫
ICat dogAdapter = new CatDogAdapter(dog);
System.out.println("\n=== 狗学猫抓老鼠 ===");
dogAdapter.catchMouse();
// 原始猫行为
System.out.println("\n=== 原始猫行为 ===");
cat.catchMouse();
// 原始狗行为
System.out.println("\n=== 原始狗行为 ===");
dog.bark();
}
}
3.{{image.png(uploading...)}}

浙公网安备 33010602011771号