适配器模式

1. 适配器的原理

这里写图片描述

火鸡冒充鸭子

一个公司做鸭子产品,一个公司做火鸡产品。
这里写图片描述
如果火鸡公司想要做鸭子产品,通过火鸡适配器,让火鸡在外界的形象看起来就是鸭子,但内部所调用的东西都依然是火鸡的。

代码实现

对象适配器
构造方法内传入的是需要被适配的那个对象

/**
 * 火鸡冒充鸭子
 * Created by Administrator on 2017/6/24.
 */
public interface Duck {
    public void quack();
    public void fly();
}
/**
 * 鸭子实现类,绿头鸭
 * Created by Administrator on 2017/6/24.
 */
public class GreenHeadDuck implements Duck {
    public void quack() {
        System.out.println("Ga Ga Ga");
    }

    public void fly() {
        System.out.println("I am flying a long distance");
    }
}

/**
 * 火鸡接口
 * Created by Administrator on 2017/6/24.
 */
public interface Turkey {
    public void gobble();
    public void fly();
}
/**
 * 火鸡实现类,野火鸡
 * Created by Administrator on 2017/6/24.
 */
public class WildTurkey implements Turkey {
    public void gobble() {
        System.out.println("Go Go Go");
    }

    public void fly() {
        System.out.println("I am flying a short distance");
    }
}
/**
 * 火鸡适配器,对外展现鸭子的特性,方法是鸭子的方法,调用内容依旧是火鸡
 * Created by Administrator on 2017/6/24.
 */
public class TurkeyAdapter implements Duck {
    private Turkey turkey;

    public TurkeyAdapter(Turkey turkey){
        this.turkey = turkey;
    }

    public void quack() {
        turkey.gobble();
    }

    public void fly() {
        for(int i=0;i<5;i++){
            turkey.fly();
        }
    }
}
//测试类
public class Test {
    public static void main(String[] args) {
        GreenHeadDuck greenHeadDuck = new GreenHeadDuck();
        WildTurkey wildTurkey = new WildTurkey();

        Duck duck = new TurkeyAdapter(wildTurkey);
        greenHeadDuck.quack();
        greenHeadDuck.fly();
        wildTurkey.gobble();
        wildTurkey.fly();
        duck.quack();
        duck.fly();
    }
}

这里写图片描述

2. 对象适配器和类适配器

类适配器
这里写图片描述
适配器要继承被适配者的类,和实现目标接口。

/*
 *适配器的类,其他类同上  
 *需要将火鸡转为鸭子,火鸡是被适配类,鸭子是目标类
 *继承野火鸡类,实现鸭子接口
 */
public class TurkeyAdapter extends WildTurkey implements Duck {
    public void quack() {
        super.gobble();
    }

    public void fly(){
        super.fly();
        super.fly();
        super.fly();
    }
}

对象适配器和类适配器的差异

这里写图片描述

3. 从枚举器到迭代器的适配

从老版本的枚举器如何通过适配的方式升级到迭代器

通过对象适配器的形式,进行构建

public class EnumerationIterator implements Iterator<Object> {
    private Enumeration enumeration;

    public EnumerationIterator(Enumeration enumeration){
        this.enumeration = enumeration;
    }

    public boolean hasNext() {
        return enumeration.hasMoreElements();
    }

    public Object next() {
        return enumeration.nextElement();
    }

    public void remove() {
        throw new UnsupportedOperationException();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值