白话适配器模式,通俗易懂
2017-06-04 23:01
148 查看
肥宅很喜欢听音乐,有一天他在湖边一边听音乐一边踩单车,听得正嗨,一不小心旁边有个人穿过,肥宅一个刹车,结果自己用了多年的肾5掉进湖里了。肥宅赶紧捞起自己的肾5,发现已经用不了,肥宅这下心疼死了。
过了几天,肾7出了,肥宅忍一忍,用自己存了很久的钱买了台肾7。肥宅并没了解过肾7有什么改变,结果想用自己以前的耳机,发现居然肾7没有耳机圆孔,这下怎么办,怎么插下去。肥宅赶紧找手机店的老板,沟通一番,原来肾7没有耳机孔了,这下怎么办,两个口不匹配,这下怎么办,原来苹果出了一个转换器,买一个转换器就可以听歌了,肥宅无奈之下,又花钱买了一个转换器。
好了,讲了一长段故事,其实重点讲的就是适配器模式。当接口不匹配的时候怎么办,耳机口和lightning口不匹配,于是适配器出现了,可以插入lightning口,又有耳机插入的圆孔(实现了旧接口,又组合了新接口),适配器模式讲的就是这个意思。下面看看代码。
过了几天,肾7出了,肥宅忍一忍,用自己存了很久的钱买了台肾7。肥宅并没了解过肾7有什么改变,结果想用自己以前的耳机,发现居然肾7没有耳机圆孔,这下怎么办,怎么插下去。肥宅赶紧找手机店的老板,沟通一番,原来肾7没有耳机孔了,这下怎么办,两个口不匹配,这下怎么办,原来苹果出了一个转换器,买一个转换器就可以听歌了,肥宅无奈之下,又花钱买了一个转换器。
没有耳机圆孔的iphone7
只能插入到圆孔的耳机
有线耳机听歌需要经过lightning口
新出的适配器
好了,讲了一长段故事,其实重点讲的就是适配器模式。当接口不匹配的时候怎么办,耳机口和lightning口不匹配,于是适配器出现了,可以插入lightning口,又有耳机插入的圆孔(实现了旧接口,又组合了新接口),适配器模式讲的就是这个意思。下面看看代码。
public class IPhone7 { //iphone7有lightning口,没有听歌用的圆孔 public Lightning lightning; public void setLightning(Lightning lightning) { this.lightning=lightning; } //听歌只能用lightning口 public void listenMusic() { lightning.listenMusic(); } }
//要听歌除了无线必需要必须用lightning public interface Lightning { void listenMusic(); }
//耳机圆孔 public interface Circle { void listenMusic(); }
//耳机插入到圆孔就能听歌 public class Earphone implements Circle{ @Override public void listenMusic() { // TODO 自动生成的方法存根 System.out.println("肥宅用圆孔耳机听歌"); } }
//适配器实现了lightning口,可以插入到lightning口 public class Adapter implements Lightning{ //同时有耳机圆孔 public Circle circle; public Adapter(Circle circle) { this.circle=circle; } @Override public void listenMusic() { // TODO 自动生成的方法存根 circle.listenMusic(); } }
public class 肥宅 { public static void main(String[] args) { //买了一个一台iphone7 IPhone7 iphone=new IPhone7(); //有一个插入到圆孔就可以听歌的旧耳机 Circle circle=new Earphone(); //买一个适配器,适配器上插上耳机 Adapter adpter=new Adapter(circle); //在lightning口上插上买的适配器 iphone.setLightning(adpter); //通过适配器实现了用lightning口听歌 iphone.listenMusic(); } }
那么问题来了
适配器模式有点亡羊补牢的意思?
是的,我们一般不会刻意去使用适配器模式,适配器模式一般不会出现在设计阶段。有没有在设计的时候就用适配器模式?
有的,当项目使用第三方接口的时候,我们没有必要根据他的接口去改变我们自己的接口,应用适配器就可以。设计模式好像很少用到?
不要为了使用而使用,这样反而会过度设计,看哪种模式能帮助我们就行了,所以先了解设计模式,用到的时候才不会方恨少。我觉得分享是一种精神,分享是我的乐趣所在,不是说我觉得我讲得一定是对的,我讲得可能很多是不对的,但是我希望我讲的东西是我人生的体验和思考,是给很多人反思,也许给你一秒钟、半秒钟,哪怕说一句话有点道理,引发自己内心的感触,这就是我最大的价值。(这是我喜欢的一句话,也是我写博客的初衷)
相关文章推荐
- 用通俗易懂的大白话讲解Map/Reduce原理
- 用通俗易懂的大白话讲解Map/Reduce原理
- 用通俗易懂的大白话讲解Map/Reduce原理
- 绝对通俗易懂SVM的理解,大白话
- Mahout--用通俗易懂的大白话讲解Map/Reduce原理
- 从汇编和高级语言的角度理解传值方式,传值,传引用,传指针的本质机制与区别。白话通俗易懂。
- Mahout--用通俗易懂的大白话讲解Map/Reduce原理
- 通俗易懂设计模式系列--白话设计模式
- 用通俗易懂的大白话讲解Map/Reduce原理
- 最通俗易懂的描述。。。。。技术 或者 白话。。。。
- 白话设计模式--结构型模式之 适配器模式(Adapter)
- 用通俗易懂的大白话讲解Map/Reduce原理
- 白话设计模式--结构型模式--组合模式,桥接模式和适配器模式
- 白话CMMI,^_^,通俗易懂
- 用通俗易懂的大白话讲解Map/Reduce原理
- 通俗易懂系列 | 设计模式(三):适配器模式
- 用通俗易懂的大白话讲解Map/Reduce原理
- 白话设计模式 --结构型模式--装饰者(Decorator)模式,适配器模式和外观模式
- 用通俗易懂的大白话讲解Map/Reduce原理