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)

相关推荐
科技百宝箱20 小时前
03-AI Agent全栈架构系统化落地指南
人工智能·架构
Han.miracle20 小时前
数据结构二叉树——层序遍历&& 扩展二叉树的左视图
java·数据结构·算法·leetcode
Orange_sparkle20 小时前
若依使用基本步骤
java·vue
kevinfkq21 小时前
Java-idea编辑器中Jar方式打包启动
java·intellij-idea·jar
€81121 小时前
Java入门级教程23——配置Nginx服务器、轻量级HTTP服务开发、前后端分离实现完整应用系统
java·开发语言·仓颉·生成验证码
趣味编程11121 小时前
物联网系统三层架构解析
物联网·架构
mit6.82421 小时前
[Backstage] 认证请求的流程 | JWT令牌
架构
星秀日21 小时前
框架--SpringMVC
java·开发语言·servlet
小蒜学长21 小时前
springboot餐厅信息管理系统设计(代码+数据库+LW)
java·数据库·spring boot·后端
Jabes.yang1 天前
Java大厂面试实录:从Spring Boot到微服务的技术探讨
java·spring boot·spring cloud·微服务·技术面试