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)

相关推荐
蒸蒸yyyyzwd19 分钟前
cpp对象模型学习笔记1.1-2.8
java·笔记·学习
程序员徐师兄1 小时前
Windows JDK11 下载安装教程,适合新手
java·windows·jdk11 下载安装·jdk11 下载教程
java干货1 小时前
<span class=“js_title_inner“>微服务:把一个简单的问题,拆成 100 个网络问题</span>
微服务·云原生·架构
RANCE_atttackkk1 小时前
[Java]实现使用邮箱找回密码的功能
java·开发语言·前端·spring boot·intellij-idea·idea
成茂峰2 小时前
软考高级·系统架构设计师 | 一、绪论
架构·系统架构·软考高级·系统架构设计师
五岳2 小时前
DTS按业务场景批量迁移阿里云MySQL表实战(下):迁移管理平台设计与实现
java·应用·dts
zhougl9962 小时前
Java 所有关键字及规范分类
java·开发语言
Python 老手2 小时前
Python while 循环 极简核心讲解
java·python·算法
java1234_小锋3 小时前
Java高频面试题:MyISAM索引与InnoDB索引的区别?
java·开发语言
Mr_Xuhhh3 小时前
MySQL函数详解:日期、字符串、数学及其他常用函数
java·数据库·sql