Adapter适配器模式的理解

Adapter适配器模式是一种结构型模式,主要应对:由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是,新环境要求的接口是现存对象所不满足的。

《设计模式》中说道:将一个类的接口转换成客户端程序希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的类可以一起工作。

下面列举一个具体的应用场景(摘录自Thinking In Java)

我们知道,如果要使一个类能用于foreach语法,可以让这个类实现Iterable接口。假如有一个Iterable类,你想添加一种或者多种在foreach语句中使用这个类的方法,应该如何做呢?例如,假设你希望可以选择以向前的方向或者向后的方向迭代一个单词列表。如果直接继承这个类,并覆盖iterator()方法,你只能替代现有的方法,而不能实现选择。

当你有一个接口并需要另一个接口时,编写适配器就可以解决问题。这里,我希望在默认的前向迭代器的基础上,添加反向迭代器的能力,因此不能使用覆盖,而是添加了一个能够产生Iterable对象的方法,该对象可以用于foreach语句,这使得我们可以提供多种使用foreach的方式:

代码如下:


class ReverisbleArrayList<T> extends ArrayList<T> {
public ReverisbleArrayList(Collection<T> c) {super(c);}
public Iterable<T> reverse() {
return new Iterable<T>() { //实现iterable接口的 匿名内部类

@Override
public Iterator<T> iterator() {
return new Iterator<T>() {
int current = size() - 1;
@Override
public boolean hasNext() {
return current > -1;
}

@Override
public T next() {
return get(current--);
}

@Override
public void remove() {
}
};
}
};
}
}

public class AdapterMethodIdiom {
public static void main(String[] args) {
ReverisbleArrayList<String> ral =
new ReverisbleArrayList<String>(
Arrays.asList("asm c c++ java c# python".split(" "))
);

for(String s : ral)
System.out.print(s + " ");
System.out.println();

for(String s : ral.reverse())
System.out.print(s + " ");
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值