设计模式--适配器模式

实验8:适配器模式

本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:

1、理解适配器模式的动机,掌握该模式的结构;

2、能够利用适配器模式解决实际问题。

实验任务:双向适配器

实现一个双向适配器,使得猫可以学狗叫,狗可以学猫抓老鼠。

类图

源代码

java 复制代码
public class Adapter implements Dog, Cat
{
    private Dog dog;
    private Cat cat;

    public Dog getDog()
    {
        return dog;
    }

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

    public Cat getCat()
    {
        return cat;
    }

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

    @Override
    public void miao()
    {
        System.out.print("猫学");
        dog.wang();
    }

    @Override
    public void catchMouse()
    {
        cat.catchMouse();
    }

    @Override
    public void wang()
    {
        dog.wang();
    }

    @Override
    public void act()
    {
        System.out.print("狗学");
        cat.catchMouse();
    }
}

public interface Cat
{
    //猫叫
    public void miao();
    //猫捉老鼠
    public void catchMouse();
}

public class CatImpl implements Cat
{
    @Override
    public void miao()
    {
        System.out.println("猫叫:喵喵喵");
    }

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

public interface Dog
{
    //狗叫
    public void wang();
    //狗捉鸡
    public void act();
}


public class DogImpl implements Dog
{
    @Override
    public void act()
    {
        System.out.println("狗捉鸡");
    }

    @Override
    public void wang()
    {
        System.out.println("狗叫:汪汪汪");
    }
}

public class Client
{
    public static void main(String[] args)
    {
        //实例化猫和狗
        Cat cat = new CatImpl();
        Dog dog = new DogImpl();
        //猫叫
        cat.miao();
        //狗捉鸡
        dog.act();
        //实例化双向适配器
        Adapter adapter = new Adapter();
        //将狗对象设置到适配器中
        adapter.setDog(dog);
        //将猫对象设置到适配器中
        adapter.setCat(cat);
        //将适配器对象赋值给猫,实现猫对象学习狗的行为
        cat = adapter;
        //猫学狗叫
        cat.miao();
        //将适配器对象赋值给狗,实现狗对象学习猫的行为
        dog = adapter;
        // 狗学猫捉老鼠
        dog.act();
    }
}

运行效果

相关推荐
AI人工智能+电脑小能手1 天前
大白话说Java设计模式-28-模板方法模式(业务实战篇)
java·设计模式·模板方法模式·spring源码·订单系统·代码复用
leeyi1 天前
两个 Agent 怎么协作:Host-Worker 模式(第91篇-E77)
设计模式·agent·ai编程
AI人工智能+电脑小能手2 天前
大白话说Java设计模式-26-策略模式(业务实战篇)
java·spring·设计模式·策略模式·支付系统·算法切换
星火10242 天前
【Groovy翻译-进阶篇】Groovy 中的设计模式
后端·设计模式·groovy
AI人工智能+电脑小能手2 天前
大白话说Java设计模式-27-策略模式(源码剖析篇)
java·spring·设计模式·策略模式·源码分析·事务管理·comparator
SL_staff2 天前
风控规则如何从硬编码解耦?我们在 JVS-Rules 中的实践与思考
java·spring boot·设计模式
小此方2 天前
Linux加餐(一):藏在Linux中的设计模式(一)策略模式与日志
linux·设计模式·策略模式
To_OC3 天前
从一行入口代码啃透 NestJS:工厂模式、装饰器和依赖注入是怎么串起来的
后端·设计模式·nestjs
东方小月3 天前
从零开发一个 Coding Agent(十二):实现版本化 JSONL 与真实 CLI 入口
前端·设计模式·前端框架
程序员贺加贝3 天前
轻制造SaaS的生产闭环建模-BOM工单领料报工质检与入库
java·设计模式·架构