首页 >> 大全

HeadFirst-设计模式-适配器模式

2023-10-03 大全 32 作者:考证青年

适配器模式:将一个类的接口转换成用户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间

就相当于插座和插排,你的热水壶是三孔插头,插座是两孔的,用不了,这个时候你拿一插排,接线头是两孔的,插排上有三孔的就可以用了。

简单如图:

这里写图片描述

话不多说、上实例:

现有两个不同的接口,鸭子Duck提供嘎嘎叫quak()和飞fly()方法,还有一火鸡接口提供咕咕叫()和飞fly()方法,现在想让火鸡对象也能具备鸭子的行为,你觉得可能吗?

1.先来定义鸭子接口和具体鸭子类

//定义鸭子接口
interface Duck2{public void quak();public void fly();
}
//绿头鸭实例
class MallarDuck implements Duck2{public void quak(){System.out.println("我是绿头鸭,我会呱呱呱。。");}public void fly(){System.out.println("我是绿头鸭,我会飞。。");}
}

2.再来定义火鸡接口和具体火鸡类

_适配器模式案例_设计模式适配器模式实验报告

//定义火鸡接口
interface Turkey{public void gooble();public void fly();
}
//火鸡实例
class WildTurkey implements Turkey{public void gooble(){System.out.println("我是火鸡,我会咕咕叫。。");}public void fly(){System.out.println("我是火鸡,只能飞很近。。");}
}

3.现在就可以来定义会鸭子行为的火鸡适配器接口了

火鸡是不会嘎嘎叫的,只不过它调用的是嘎嘎叫方法,真正还是咕咕叫的。也就是实现鸭子的接口执行火鸡的方法

//适配器来了  具有鸭子功能的火鸡适配器
class TurkeyAdapter implements Duck2{Turkey turkey;public TurkeyAdapter(Turkey turkey){this.turkey = turkey;}public void quak(){//实现鸭子接口,要重写鸭子的抽象方法,实际去执行火鸡的方法turkey.gooble();}public void fly(){//同上 飞5次for(int i=0;i<5;i++){turkey.fly();}}
}

4.现在就可以简单测试一下,让火鸡执行鸭子的方法啦

public class AdapterPattern {public static void main(String args[]){MallarDuck duck = new MallarDuck();//先定义个鸭子对象WildTurkey turkey = new WildTurkey();//定义个火鸡对象duck.quak();//鸭子叫duck.fly();//鸭子飞turkey.gooble();//火鸡咕咕叫turkey.fly();//火鸡飞//重点来了TurkeyAdapter adapter = new TurkeyAdapter(turkey);//创建适配器对象,传入火鸡对象。adapter.quak();//让火鸡执行鸭子叫adapter.fly();//让火鸡像鸭子一样飞}
}

5.运行结果

我是绿头鸭,我会呱呱呱。。

我是绿头鸭,我会飞。。

我是火鸡,我会咕咕叫。。

设计模式适配器模式实验报告__适配器模式案例

我是火鸡,只能飞很近。。

我是火鸡,我会咕咕叫。。

我是火鸡,只能飞很近。。

我是火鸡,只能飞很近。。

我是火鸡,只能飞很近。。

我是火鸡,只能飞很近。。

我是火鸡,只能飞很近。。

我的理解是这样的,就是A B俩接口,方法各不同,在定义一个类实现A接口,重写A接口方法里去调B接口的方法,达到适配的目的,就是你看上去调的A接口的方法,其实执行的是B接口的方法,神不神奇?

但是这样只能达到单项适配的目的发,翻过来A接口适配B接口的适配还要在写一个?多麻烦,直接实现A B 接口,把A B 接口方法都重写不是达到双向适配了吗?

类适配器 PK 对象适配器

这里写图片描述

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了