您的位置:首页 > 编程语言 > Java开发

23种java设计模式之适配器模式

2016-07-31 12:02 357 查看
说到适配器模式,我突然想到了我刚买的手机,因为这款新手机的耳机孔和国标的不同,商家就送了一个转接口,可以把平常的耳机用于新手机中,这其实也就是适配器的概念。下面我用一个例子来更具体的说明一下

要让火鸡实现鸭子的功能

一、使用对象适配器

概念:将一个类的接口转换成另一种接口,让原本接口不兼容的类可以兼容

原理图:



对于鸭子Duck:

public interface Duck {
public void quack();
public void fly();

}

对于火鸡Turkey: 

public interface Turkey {
public void gobble();
public void fly();

}

鸭子实现类GreenDuck :

public class GreenDuck implements Duck {
public void quack() {
System.out.println("Ga Ga");
}
public void fly() {
System.out.println("im flying a long distance");
}

}

火鸡实现类WildTurkey :

public class WildTurkey implements Turkey {
public void gobble() {
System.out.println("Gu Gu");
}
public void fly() {
System.out.println("im flying a short distance");
}

}

如果想要需求中的结果,我们必须要有一个适配器TurkeyAdaptor :

public class TurkeyAdaptor implements Duck {
Turkey turkey;
public TurkeyAdaptor(Turkey turkey){
this.turkey=turkey;
}
public void quack() {
turkey.gobble();
}
public void fly() {
for(int i=0;i<5;i++){
turkey.fly();
}
}

}

这样就可以实现,虽然火鸡伪装的鸭子还是GuGu叫,但是模拟的飞行,用多次短飞行模拟鸭子的长距离飞行。

public class Test {
public static void main(String[] args) {
GreenDuck greenDuck=new GreenDuck();
WildTurkey wildTurkey=new WildTurkey();
TurkeyAdaptor wildTurkeyAdaptor=new TurkeyAdaptor(wildTurkey);
greenDuck.quack();
greenDuck.fly();
wildTurkey.gobble();
wildTurkey.fly();
wildTurkeyAdaptor.quack();
wildTurkeyAdaptor.fly();
}

}

二、类适配器

概念:通过多重继承目标接口和被适配者方式来实现适配

原理图:



对于上面的例子,我们需要更改适配器TurkeyAdaptor1 :

public class TurkeyAdaptor1 extends WildTurkey implements Duck {
public void quack() {
super.gobble();
}
public void fly(){
super.fly();
super.fly();
super.fly();
}

}

最后实现的结果还是和对象适配器的结果是一样的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息