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)

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部