一头扎进设计模式-适配器模式

定义:定义为将一个类的接口变换成客户端所期待的一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。

用自己的话说:通过一个中间类进行接口转换,把一个接口转换成另外一个接口

代码:
定义一个鸭子接口:

public interface Duck {
    //这是一个鸭接口,适配器要以该接口作为目标进行适配
    void quack();//鸭子呱呱叫
    void fly();//鸭子会会飞
}

定义一个鸭子接口的实现类,绿头鸭:

public class MallardDuck implements Duck {
    //绿头鸭是一只鸭
    /* (非 Javadoc)
     * @see com.jjt.adapter.Duck#quack()
     */
    @Override
    public void quack() {
        // 
        System.out.println("我是一只绿头鸭,嘎嘎嘎嘎嘎");
    }

    /* (非 Javadoc)
     * @see com.jjt.adapter.Duck#fly()
     */
    @Override
    public void fly() {
        // 
        System.out.println("~~~~~~~飞行中~~~~~");
    }

}

定义一个火鸡接口:

public interface Turkey {
    //这是一个火鸡接口,是用于被适配的
    void gobble();//火鸡只会咯咯咯咯咯咯叫
    void fly();//火鸡会飞,但是飞不远
}

定义一只火鸡:

public class WildTurkey implements Turkey {
    //这是一只火鸡类,用于被适配
    /* (非 Javadoc)
     * @see com.jjt.adapter.Turkey#gobble()
     */
    @Override
    public void gobble() {
        // 
        System.out.println("我是一只火鸡,咯咯咯咯咯咯");
    }

    /* (非 Javadoc)
     * @see com.jjt.adapter.Turkey#fly()
     */
    @Override
    public void fly() {
        // 
        System.out.println("~~飞行~~");

    }

}

定义火鸡适配器,功能是将火鸡转变为鸭子:

public class TurkeyAdapter implements Duck{
    Turkey turkey;
    /**
     * 
     */
    public TurkeyAdapter(Turkey turkey) {
        // 传入一只火鸡进行适配
        this.turkey=turkey;
    }
    /* (非 Javadoc)
     * @see com.jjt.adapter.Duck#quack()
     */
    @Override
    public void quack() {
        // 适配鸭子的叫方法
        this.turkey.gobble();
        System.out.println("超级适配器之变声:gagagagaga");
    }

    /* (非 Javadoc)
     * @see com.jjt.adapter.Duck#fly()
     */
    @Override
    public void fly() {
        // 适配鸭子的飞方法
        for(int i = 0 ; i < 5 ;i ++){
            this.turkey.fly();//让火鸡飞五下相当于鸭子飞
        }
    }
}

测试:

public static void main(String[] args){
        Duck mallardDuck = new MallardDuck();
        catchDuck(mallardDuck);

        Turkey turkey = new WildTurkey();
        Duck turkeyDuck = new TurkeyAdapter(turkey);
        catchDuck(turkeyDuck);
    }

    public static void catchDuck(Duck duck){
        System.out.println("鸭子乐园:只有鸭子才能进来");
        duck.quack();
        duck.fly();
    }

运行结果:

鸭子乐园:只有鸭子才能进来
我是一只绿头鸭,嘎嘎嘎嘎嘎
~~~~~~~飞行中~~~~~
鸭子乐园:只有鸭子才能进来
我是一只火鸡,咯咯咯咯咯咯
超级适配器之变声:gagagagaga
~~飞行~~
~~飞行~~
~~飞行~~
~~飞行~~
~~飞行~~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值