“适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。”
适配器模式主要通过继承、对象组合来实现适配器功能,一个比较简单的例子是转接头,适配器相当于一个转接头,可以将HDML转换为VGA以及type-c等。
整体上可以分为三种类型:类适配、对象适配以及接口适配。对于下属例子中几个类做简要说明:目标(Target)角色是所期待得到的方法等,源(Source)角色是现在需要适配的接口,适配器(Adaper)角色是把源接口转换成目标接口。
1、类适配
类适配器模式:创建新类,继承源类,并实现新接口。
public class
Source
{
public void
func1
(){
System
.
out
.
println
(
"func1..."
);
}
}
public interface
Target
{
public void
func2
();
}
public class
Adapter
extends
Source
implements
Target
{
@Override
public void
func2
() {
System
.
out
.
println
(
"func2..."
);
}
}
public class
AdapterDemo
{
public static void
main
(
String
[]
args
) {
Adapter
adapter
=
new
Adapter
();
adapter
.
func1
();
adapter
.
func2
();
}
}
2、对象适配
对象适配器模式:
创建新类持源类的实例,并实现新接口。
public interface
Target
{
public void
func1
();
public void
func2
();
}
public class
Source
{
public void
func1
(){
System
.
out
.
println
(
"func1..."
);
}
}
public class
Adapter
implements
Target
{
private
Source
source
;
public
Adapter(
Source
source
) {
this
.
source
=
source
;
}
public void
func1
() {
this
.
source
.
func1
();
}
public void
func2
() {
System
.
out
.
println
(
"func2..."
);
}
}
public class
AdapterDemo
{
public static void
main
(
String
[]
args
) {
Adapter
adapter
=
new
Adapter
();
adapter
.
func1
();
adapter
.
func2
();
}
}
3、接口适配
接口适配器模式:
创建新的抽象类实现旧接口方法。
abstract class
adapter
implements
Source
{
void
func2
();}
4、适配器模式的优点
系统需要使用现有的类,而此类的接口不符合系统的需要。那么通过适配器模式就可以让这些功能得到更好的复用。
在实现适配器功能的时候,可以调用自己开发的功能,从而自然地扩展系统的功能。
5、适配器模式的缺点
- 过多地使用适配器,会让系统非常零乱,不易整体进行把握。
- 由于 JAVA 至多继承一个类,所以至多只能适配一个适配者类,而且目标类必须是抽象类。