首页 > 代码库 > JAVA设计模式之适配器模式

JAVA设计模式之适配器模式

什么是适配器,说文解字一下,这里的适配应该是个动词,而且用古文的用法应该是使动用法,翻译成为,使.....适合原有的事物,配合新的事物的器具。

        曾几何时,我也有幸卖过笔记本电脑,也是在那我第一次听到了适配器这个词语。一个连接电源和电脑的小黑块,上面注明了电压,电流等等的属性,这就是适配器。这里或许要适配几种事物啦,适配电源,起变压作用,同时适配电线,使三角插座可以变成一个圆圆的小孔插线插入笔记本电脑的电源口。


        所以,咱们这儿用白话,或者说是人话来解释一下什么是适配器。用一个器具让原事物A再不需要改变的条件下可以满足事物B的要求。

      这里再啰嗦下,贴下百科上面的适配器模式的注解:

在计算机编程中,适配器模式(有时候也称包装样式或者包装)将一个类的接口适配成用户所期待的。

一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。

再看这样很晦涩的话应该就很容易去理解什么是适配器模式。

OK,说了一大堆的废话,会JAVA的我们,到底如何用JAVA语言来描述出适配器模式呢?这里我们就用笔记本的例子来描述出适配器模式!

首先,先阐述下笔记本这个例子里的几个事物。

1.电线220V:用于插在电源插座上和连接电器,传输电源220V电压和一个三孔的的电源出口。

2.电线110V:用户连接适配器和笔记本电脑,可以传输110V电压和一个单孔电源出口。

3.适配器:用于连接电线220v和电线110v,将220V电压转换成110V电压。降电线的3孔电源出口转化成为笔记本电脑所需要单孔电源。

4.普通家用电脑主机,可以直接用直接连接220V的3孔电源线。

5.笔记本电脑,只能连接110V的电线和有一个单孔电源进口。

6.人,开启电脑

首先定义出电线这个接口。

/**
 * 电线接口,提供电压和3孔电源出口
 * 将就理解下把,我的英文水平也就这样了
 */
public interface Line1 {
	//提供220V电压
	public void voltage220();
	
	//提供3孔电源出口
	public void kong3();
}


当电线定义完毕出之后,我们就需要一台PC主机去实现这个电线的功能。

public class PcMechine implements Line1 {

	@Override
	public void kong3() {
		System.out.println("3孔插座插入");		
	}

	@Override
	public void voltage220() {
		System.out.println("连接电源,提供220V电压");
	}
}

这时候我们再定义一个人的类,这个人类就是负责来启动电脑

public class Person {
	/**
	 * 使用220V电源线开启电脑
	 * @param line1
	 */
	public void startPc(Line1 line1){
		line1.voltage220();
		line1.kong3();
		System.out.println("启动电脑");
	}
}


我们测试一下。

public class Test {

	/**
	 * @param args
	 */
	//拿一台直接连接好220V电源线的主机
<span style="white-space:pre">	</span>Line1 mechine= new PcMechine();
<span style="white-space:pre">	</span>Person p = new Person();
<span style="white-space:pre">	</span>p.startPc(mechine);

}
输出结果:

连接电源,提供220V电压
3孔插座插入
主机启动

然后现在我们多了一台笔记本,这个卖笔记本的还算有良心,送给我们一条110V的单孔线。。

电源线:

public interface Line2 {
	//提供110V电压
	public void voltage110();
	
	//提供1孔电源出口
	public void kong1();
}

笔记本电脑

public class NotePc implements Line2 {
	
	
	@Override
	public void kong1() {
		System.out.println("单孔插座插入");
		
	}

	@Override
	public void voltage110() {
		System.out.println("使用110V电压");
		
	}
	
}

这时候问题来了,这根电线对于我们的PC主机是可以直接使用的,因为PC主机是直接使用用220V电压已经3孔的电源的。

但是如果我们现在 又多了一台笔记本,笔记本是使用110V电压,并且只能使用单孔的电源,怎么办。而我们手上有的是一条单孔110V的电源线,但是问题是这条电源线不能插到插座上,咋办?

我们意淫一下,把220V线的线先抽掉几根变成110V,再把3头剪掉和110V的线拧在一块?没问题,当我们大干一场之后,我们终于可以用笔记本电脑了。这时候,我突然想起我有重要的资料在台式电脑里,完蛋,现在线让我剪掉了,不能连到台式电脑上了。。

额,这时候适配器出现了。

不管杂说,买也好,手动做也好,总之我们有了这个适配器。这个适配器和PC机一样,有3孔电源口,需要220V电压。但是他在接入220V电源之后,可以降220V电源转化成110V电源输出,可以将3孔输入转化成单孔输出。

public class Adapter implements Line1{
	//适配器可以连接110V的单孔电源线
	private Line2 line2;
	
	public Adapter(Line2 line2){
		this.line2=line2;
	}
	@Override
	public void kong3() {
		System.out.println("将3孔电源转换为单孔电源");
		line2.kong1();
		
	}

	@Override
	public void voltage220() {
		System.out.println("连接电源,将220V电压转换为110V电压");
		line2.voltage110();
		
	}

}



好了,适配器我们已经弄好了,把适配器和220V电源线,110V电源线都连接起来,测试一下吧,看看笔记本电脑能不能正常使用。

public class Test {
	public static void main(String[] args) {
		//拿一台带110V电源线的笔记本来
		Line2 notePc = new NotePc();
		
		//造了一个适配器,并连接上220V电源线,然后把连接着笔记本的110V电源线插入到适配器
		Line1 Adapter= new Adapter(notePc);
		Person p = new Person();
		//将连着笔记本电脑的和220V电源线的适配器提供给人,并开机
		p.startPc(Adapter);
	}
}
输出:

连接电源,将220V电压转换为110V电压
使用110V电压
将3孔电源转换为单孔电源
单孔插座插入
启动电脑


哇塞,笔记本电脑启动了。。


至此,适配器模式介绍完毕。我们回头再来总结一下,到底什么是适配器。

正如我上面的代码,适配器是一个工具,他兼容适应原有的事物(220V的电源线),并且配合能与新的事物(110V电源线)。

这里的220V电源线,相当于原有代码,他可以满足PC主机的要求。

而笔记本电脑呢是新的客户,或者说新的要求。

再不改造原有代码的情况下,造一个新的工具,来满足新的要求。这就是适配器模式。


透过适配器模式,我们再来看JAVA,其实适配器模式是一种JAVA多态性的一种使用。一个抽象的方法,可以有多种实现的方式。正如一条220V的电源线,可以直接连接PC,也可以连接具有变压功能的适配器。这都是不同的连接方式(实现方式),当不同连接的时候会生成新的结果。

这不就是JAVA多态性的最好体现吗?


文字有些凌乱,还请见谅。

本文乃原创,转载请注明出处。。谢谢啦。


JAVA设计模式之适配器模式