24.12.06

[实验任务一]:双向适配器
实现一个双向适配器,使得猫可以学狗叫,狗可以学猫抓老鼠。
实验要求:

  1. 画出对应的类图;
    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.注意编程规范。

posted @ 2024-12-06 18:23  起名字真难_qmz  阅读(7)  评论(0)    收藏  举报