11.17

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

  1. 画出对应的类图;

  2. 提交源代码;

package adapter;

// Cat接口
interface Cat {
    void cry();
    void catchMouse();
}

// Dog接口
interface Dog {
    void wang();
    void action();
}

// 具体的猫类
class ConcreteCat implements Cat {
    @Override
    public void cry() {
        System.out.println("猫叫:喵喵喵~");
    }

    @Override
    public void catchMouse() {
        System.out.println("猫抓老鼠");
    }
}

// 具体的狗类
class ConcreteDog implements Dog {
    @Override
    public void wang() {
        System.out.println("狗叫:汪汪汪!");
    }

    @Override
    public void action() {
        System.out.println("狗在追球");
    }
}

// 双向适配器
class TwoWayAdapter implements Cat, Dog {
    private Cat cat;
    private Dog dog;

    public void setCat(Cat cat) {
        this.cat = cat;
    }

    public void setDog(Dog dog) {
        this.dog = dog;
    }

    // 实现Cat的方法
    @Override
    public void cry() {
        if (cat != null) {
            cat.cry();
        } else if (dog != null) {
            // 狗学猫叫
            System.out.println("狗学猫叫:喵~汪~");
        }
    }

    @Override
    public void catchMouse() {
        if (cat != null) {
            cat.catchMouse();
        } else if (dog != null) {
            // 狗学猫抓老鼠
            System.out.println("狗学猫抓老鼠");
        }
    }

    // 实现Dog的方法
    @Override
    public void wang() {
        if (dog != null) {
            dog.wang();
        } else if (cat != null) {
            // 猫学狗叫
            System.out.println("猫学狗叫:汪~喵~");
        }
    }

    @Override
    public void action() {
        if (dog != null) {
            dog.action();
        } else if (cat != null) {
            // 猫学狗的动作
            System.out.println("猫学狗追球");
        }
    }
}

// 测试类
public class AdapterDemo {
    public static void main(String[] args) {
        // 创建具体的猫和狗
        Cat cat = new ConcreteCat();
        Dog dog = new ConcreteDog();
        
        // 创建双向适配器
        TwoWayAdapter adapter = new TwoWayAdapter();
        
        // 让猫学狗叫
        System.out.println("===猫学狗===");
        adapter.setCat(cat);
        adapter.wang();  // 猫学狗叫
        adapter.action();  // 猫学狗的动作
        
        // 让狗学猫叫
        System.out.println("\n===狗学猫===");
        adapter.setCat(null);  // 清除猫的引用
        adapter.setDog(dog);
        adapter.cry();  // 狗学猫叫
        adapter.catchMouse();  // 狗学抓老鼠
    }
}

3.注意编程规范。

posted @ 2024-11-13 08:43  aallofitisst  阅读(12)  评论(0)    收藏  举报