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

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)

相关推荐

  1. DP讨论——适配器、桥接模式等通用理解

    2024-07-21 19:10:04       14 阅读
  2. DP讨论——适配器模式

    2024-07-21 19:10:04       21 阅读
  3. 适配器模式理解

    2024-07-21 19:10:04       42 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-21 19:10:04       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-21 19:10:04       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-21 19:10:04       45 阅读
  4. Python语言-面向对象

    2024-07-21 19:10:04       55 阅读

热门阅读

  1. 密码学原理精解【9】

    2024-07-21 19:10:04       13 阅读
  2. Spring中的事务详解

    2024-07-21 19:10:04       12 阅读
  3. ARM/Linux嵌入式面经(十八):TP-Link联洲

    2024-07-21 19:10:04       15 阅读
  4. Ksyusha and Chinchilla

    2024-07-21 19:10:04       18 阅读
  5. 速盾:金融行业服务器如何避免DDoS攻击?

    2024-07-21 19:10:04       15 阅读
  6. 简单介绍什么是投影仪及投影仪的工作原理

    2024-07-21 19:10:04       14 阅读
  7. websocket

    websocket

    2024-07-21 19:10:04      14 阅读
  8. 基于ListBox制作一个好看的侧边菜单导航栏

    2024-07-21 19:10:04       15 阅读
  9. org.mybatis和JDBC有什么关系?

    2024-07-21 19:10:04       17 阅读
  10. JVM调优 jstat 与 jstack

    2024-07-21 19:10:04       15 阅读