DP-适配器模式代码重新理解

java 复制代码
package com.designpatterns.adapter;

/**
 * 定义鸭子接口
 */
public interface Duck {
    /**
     * 定义鸭子呱呱叫(quack)
     */
    public void quack();

    public void fly();
}


package com.designpatterns.adapter;

/**
 * 实现一个绿头鸭
 */
public class MallarDuck implements  Duck{
    @Override
    public void quack() {
        System.out.println("MallarDuck(绿头鸭)");
    }

    @Override
    public void fly() {
        System.out.println("I'm flying!");
    }
}


package com.designpatterns.adapter;

/**
 * 定义火鸡接口
 */
public interface Turkey {
    /**
     * 定义咯咯叫(gobble)
     */
    public  void gobble();
    public void fly();
}


package com.designpatterns.adapter;

/**
 * 实现一个野火鸡
 */
public class WildTurkey implements Turkey{
    @Override
    public void gobble() {
        System.out.println("咯咯叫");
    }

    @Override
    public void fly() {
        System.out.println("i'm flying a short distance");
    }
}


package com.designpatterns.adapter;

/** *
 * 定义一个适配器:adapter
 *
 * 鸭子对象短缺,用一些火鸡对象来充数;不能堂而皇之的用火鸡,因为他们接口不同
 *
 * 现实生活例子:
 *中国充电器插口与美国充电器插口,一个是扁的,一个是园的,出差去美国,必须买一个转接头(适配器), 
 *在美国给自己电脑充电,必须先给自己的插口装上转接头,方可使用美国的充电口
 *
 * 滥竽充数寓言故事
 */
public class TurkeyAdapter implements Duck{
    Turkey turkey;

    public TurkeyAdapter(Turkey turkey){
        this.turkey=turkey;
    }

    @Override
    public void quack() {
        turkey.gobble();
    }

    @Override
    public void fly() {
        //火鸡的飞行距离短,火鸡就飞5倍距离,弥补与鸭子的飞行距离差距
        for(int i=0;i<5;i++){
            turkey.fly();
        }

    }
}

package com.designpatterns.adapter;

/**
 * 测试适配器
 */
public class DuckTestDive {
    public static void main(String[] args) {
        Duck duck=new MallarDuck();

        Turkey turkey=new WildTurkey();

        Duck turkeyAdapter=new TurkeyAdapter(turkey);

        System.out.println("火鸡说:");
        turkey.gobble();
        turkey.fly();

        System.out.println("\n鸭子说:");
        testDuck(duck);

        System.out.println("\n火鸡适配器说:");
        testDuck(turkeyAdapter);

    }

    static  void  testDuck(Duck duck){
        duck.quack();
        duck.fly();
    }
}

代码运行结果如下:

带中国的插头出国,必须准备一个转接头(adapter)

相关推荐
过江龙84712 分钟前
Java架构师的AI转型之路(中):Agent与编排体系实战
架构
ziyun66688823 分钟前
Docker 容器化 Web 服务架构搭建与自动化运维项目
运维·docker·架构
技术传感器26 分钟前
让 Hermes 自动完成一个软件需求:从 Issue 到 PR 的 AI 开发流水线
人工智能·架构·aigc·需求分析·issue
Rain的Java大神之路1 小时前
线上接口负载满了如何解决
java·数据库·redis·后端·缓存·面试·架构
霸道流氓气质1 小时前
微服务架构中多实例消息抢占问题:技术解析与解决方案
微服务·云原生·架构
Dr.kangder1 小时前
嵌入式面试总结(十八)——JTAG调试
嵌入式硬件·面试·职场和发展·架构·嵌入式
counting money1 小时前
Tomcat 专题:从基础架构到性能调优与 WebSocket 实战
java·websocket·tomcat
xiaohaiAIgeo2 小时前
【2026年】HG/T 20656-2024化工暖通空调设计规范:新版标准的变化与影响
java·前端·javascript·科普知识
奈斯先生Vector2 小时前
AI 视频不是会动的图片:用 Shot Contract、时间码与音画质检构建可交付流水线
人工智能·重构·架构·prompt·aigc·音视频
小强库计算机毕业设计2 小时前
基于 Spring Boot + Vue3 的校园管理系统
java·spring boot·后端·项目实战·管理系统·技术分享·校园管理系统实战