24.12.06
[实验任务一]:双向适配器
实现一个双向适配器,使得猫可以学狗叫,狗可以学猫抓老鼠。
实验要求:
- 画出对应的类图;
![image]()
2.提交源代码;
接口
package org.test.ruanjiansheji.shipeiqi;
interface Cat {
void meow(); // 猫叫
void catchMouse(); // 抓老鼠
}
interface Dog {
void bark(); // 狗叫
void catchBall(); // 抓球
}
实现类
package org.test.ruanjiansheji.shipeiqi;
// 猫的实现类
class CatImpl implements Cat {
@Override
public void meow() {
System.out.println("猫叫: 喵喵喵");
}
@Override
public void catchMouse() {
System.out.println("猫在抓老鼠");
}
}
// 狗的实现类
class DogImpl implements Dog {
@Override
public void bark() {
System.out.println("狗叫: 汪汪汪");
}
@Override
public void catchBall() {
System.out.println("狗在抓球");
}
}
双向适配器
package org.test.ruanjiansheji.shipeiqi;
class BiDirectionalAdapter implements Cat, Dog {
private Cat cat;
private Dog dog;
// 构造函数
public BiDirectionalAdapter(Cat cat) {
this.cat = cat;
}
public BiDirectionalAdapter(Dog dog) {
this.dog = dog;
}
// 狗叫时,适配成猫叫
@Override
public void meow() {
if (dog != null) {
dog.bark(); // 狗叫
}
}
// 猫叫时,适配成狗叫
@Override
public void bark() {
if (cat != null) {
cat.meow(); // 猫叫
}
}
// 抓老鼠
@Override
public void catchMouse() {
if (dog != null) {
System.out.println("狗模仿猫抓老鼠");
} else if (cat != null) {
cat.catchMouse(); // 猫抓老鼠
}
}
// 抓球
@Override
public void catchBall() {
if (cat != null) {
System.out.println("猫模仿狗抓球");
} else if (dog != null) {
dog.catchBall(); // 狗抓球
}
}
}
主程序
public class AdapterTest {
public static void main(String[] args) {
Cat cat = new CatImpl();
Dog dog = new DogImpl();
System.out.println("猫模仿狗:");
Dog catAdapter = new BiDirectionalAdapter(cat);
catAdapter.bark(); // 猫模仿狗叫
catAdapter.catchBall(); // 猫模仿狗抓球
System.out.println("\n狗模仿猫:");
Cat dogAdapter = new BiDirectionalAdapter(dog);
dogAdapter.meow(); // 狗模仿猫叫
dogAdapter.catchMouse(); // 狗模仿猫抓老鼠
}
}
3.注意编程规范。


浙公网安备 33010602011771号