海谈湖扯Java适配器模式

扯扯鸟蛋:论适配之于人之生存之重要性

达尔文的《物种起源》中提出了进化论的观点,也即:“物竞天择,适者生存”!说的是之于社会环境人的适配、生物的适配。用到我们程序猿的代码世界,也许就是我们所写的代码之于Java编译规则的适配,编程思维之于项目最优化思维的适配吧。人无适配,无以生存;码无适配,无以……,也许后果也是挺严重的哦!

 

玩玩理论:什么是适配器模式?

《JAVA与模式》一书中开头是这样描述适配器(Adapter)模式的:适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。

 

问问上帝:为什么会有适配器?

从哲学的高度来讲:存在即合理(不在做过多的解释)!

从实际的角度来讲,刚好前几天去福米公司参观,福米给送了一个小米插线板,就举一个插线板的例子吧!

我们敲代码的笔记本电脑的插头一般都是三相的,即除了阳极、阴极外,还有一个地极。而有些地方的电源插座却只有两极,没有地极。电源插座与笔记本电脑的电源插头不匹配使得笔记本电脑无法使用。这时候一个三相到两相的转换器(适配器)就能解决此问题,而这正像是适配器模式所做的事情。

 

看看实例:有哪几种适配器模式?

适配器模式主要有类适配器模式、对象适配器模式、接口适配器模式(也有的叫缺省适配模式),

坚持不懈,老习惯,一个一个的给大家说说!

类适配器模式:

目标角色的源代码,以JAVA接口的形式实现的,这个接口声明了两个方法:evolution1()和evolution2()。

public interface Environment {
	public void evolution1();//源类Adaptee也有的方法
	public void evolution2();//源类Adaptee没有的方法,实现类需要进一步实现的方法!
}

源角色Adaptee是一个具体类,它有一个evolution1()方法,但是没有evolution2()方法。

public class Adaptee {
	public void evolution1(){
		System.out.println("物竞天择,适者生存!");
	}
}

适配器角色Darwin扩展了Adaptee,同时又实现了Environment接口。由于Adaptee没有提供evolution2()方法,而目标接口又定义了这个方法,因此适配器角色Darwin实现了这个方法。

public class Darwin1 extends Adaptee implements Environment{
	public void evolution2() {
		System.out.println("二度重申:物竞天择,适者生存!");
	}
}

对象适配器模式:

比较类的适配器模式与对象的适配器模式,相同的是,对象的适配器模式把被适配的类的API转换成为目标类的API,不同的是,对象的适配器模式不是使用继承关系连接到Adaptee类,而是使用委派关系连接到Adaptee类。所以,对象适配器的例子中,我们只需要修改Darwin类的代码即可,如下:

public class Darwin2 implements Environment{
	private Adaptee ad;
	
	public Darwin2(Adaptee ad){
		this.ad=ad;
	}
	
	public void evolution1() {
		ad.evolution1();
	}
	public void evolution2() {
		System.out.println("二度重申:物竞天择,适者生存!");
	}
}

接口适配器模式:

接口的适配器模式,冥冥中早已经用过了,还记得MouseAdapter吗?肯定记得,看其中的意思,就知道是一个适配器的角色,再详细点,就是一个鼠标适配器角色,怎么用的?哦,大家应该都懂了吧!!! 废话不多说,废例不能省!那就将上面的例子的代码稍作修改吧!

坚持不懈,老习惯,看一个接口适配器的例子!

public interface Environment {
	public void evolution1();
	public void evolution2();
	public void evolution3();
	public void evolution4();
	public void evolution5();
	public void evolution6();
	//后面还可以有很多很多的待实现的方法!!!
}

public abstract class Adaptee implements Environment{
	public void evolution1(){
	}
	public void evolution2(){
	}
	public void evolution3(){
	}
	public void evolution4(){
	}
	public void evolution5(){
	}
	public void evolution6(){
	}
}

public class Darwin3 extends Adaptee{
	public void evolution2() {
		System.out.println("二度重申:物竞天择,适者生存!");
	}
	public void evolution5() {
		System.out.println("五度重申:物竞天择,适者生存!");
	}
}

写写总结:适配器有什么优缺点?

优点:扩展性好,在实现适配器功能的时候,可以调用自己开发的功能,从而自然地扩展系统的功能。    

缺点:过多的使用适配器,会让系统非常零乱,不易整体进行把握。

 

更多的更多,期待你的思想与分享!

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值