24.11.21
实验8:适配器模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解适配器模式的动机,掌握该模式的结构;
2、能够利用适配器模式解决实际问题。
[实验任务一]:双向适配器
实现一个双向适配器,使得猫可以学狗叫,狗可以学猫抓老鼠。
实验要求:
1.画出对应的类图;
2.提交源代码;
3.注意编程规范。
- 类图

2.代码
// Cat 接口,定义猫的行为
interface Cat {
void catchMouse(); // 猫抓老鼠的行为
}
// Dog 接口,定义狗的行为
interface Dog {
void bark(); // 狗叫的行为
}
// RealCat 类,具体实现 Cat 接口
class RealCat implements Cat {
@Override
public void catchMouse() {
System.out.println("猫在抓老鼠");
}
}
// RealDog 类,具体实现 Dog 接口
class RealDog implements Dog {
@Override
public void bark() {
System.out.println("狗在汪汪叫");
}
}
// 双向适配器类,实现 Cat 和 Dog 接口
class CatDogAdapter implements Cat, Dog {
private Cat cat;
private Dog dog;
// 构造方法,允许适配器包含一只猫和一只狗
public CatDogAdapter(Cat cat) {
this.cat = cat;
}
public CatDogAdapter(Dog dog) {
this.dog = dog;
}
// Cat 行为:如果有 Cat 实例,则使用它的 catchMouse 方法;否则让狗学抓老鼠
@Override
public void catchMouse() {
if (cat != null) {
cat.catchMouse();
} else if (dog != null) {
System.out.println("狗学着抓老鼠");
}
}
// Dog 行为:如果有 Dog 实例,则使用它的 bark 方法;否则让猫学汪汪叫
@Override
public void bark() {
if (dog != null) {
dog.bark();
} else if (cat != null) {
System.out.println("猫学着汪汪叫");
}
}
}
// 测试类
public class Main {
public static void main(String[] args) {
// 创建真实的猫和狗对象
Cat realCat = new RealCat();
Dog realDog = new RealDog();
// 创建一个让猫学狗叫的适配器
Dog catAdapter = new CatDogAdapter(realCat);
catAdapter.bark(); // 输出:猫学着汪汪叫
// 创建一个让狗学抓老鼠的适配器
Cat dogAdapter = new CatDogAdapter(realDog);
dogAdapter.catchMouse(); // 输出:狗学着抓老鼠
}
}
浙公网安备 33010602011771号