适配器模式,有一个接口需要实现,但是我们现成的对象都不满足,需要加一层适配器来进行适配。
模式总体分三种:默认适配器模式,对象适配器模式,类适配器模式。
对象适配器:
public interface Duck {
public void quack(); // 鸭的呱呱叫
public void fly(); // 飞
}
public interface Cock {
public void gobble(); // 鸡的咕咕叫
public void fly(); // 飞
}
public class WildCock implements Cock {
public void gobble() {
System.out.println("咕咕叫");
}
public void fly() {
System.out.println("鸡也会飞哦");
}
}
鸭接口有 fly() 和 quare() 两个方法,鸡 Cock 如果要冒充鸭,fly() 方法是现成的,但是鸡不会鸭的呱呱叫,没有 quack() 方法。这个时候就需要适配了:
public class CockAdapter implements Duck {
Cock cock;
// 构造方法中需要一个鸡的实例,此类就是将这只鸡适配成鸭来用
public CockAdapter(Cock cock) {
this.cock = cock;
}
// 实现鸭的呱呱叫方法
@Override
public void quack() {
// 内部其实是一只鸡的咕咕叫
cock.gobble();
}
@Override
public void fly() {
cock.fly();
}
}
调用
public static void main(String[] args) {
// 有一只野鸡
Cock wildCock = new WildCock();
// 成功将野鸡适配成鸭
Duck duck = new CockAdapter(wildCock);
...
}
类适配器
最新形象的例子就是手机充电器,手机的充电器即吧220v交流电适配成为手机充电所需的5v直流电
public class AlternatingCurrent220{
//220v的输出
public int out220v(){
return 220v;
}
}
public interface DirectCurrent5{
int out5v();
}
//创建能输出5V的适配器
public class adapter extends AlternatingCurrent220 implements DirectCurrent5{
@Override
public int out5v(){
return out220v()/44;
}
}
public class phone{
public void chongdian(DirectCurrent5 directCurrent5){
//获得5v直流电
directCurrent5.out5v();
}
}
这样,手机就能用上5v的充电电压了。