1.定义:
适配器模式是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。这种模式涉及到一个单一的类,该类负责加入独立的不兼容的接口。
2.意图
将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本接口不兼容而不能一起工作的那些类可以在一起工作。
3.优点
- 可以让任何两个没有关联的类一起运行。
- 提高了类的复用
- 增加了类的透明度
- 灵活性好
4.缺点
- 过多地使用适配器,会让系统非常零乱,不容易整体把握。
- 由于Java至多只能继承一个类,所以至多只能适配一个适配者类,而且目标类必须是抽象类。
5.类的适配器模式
类的适配器模式是把适配类的API转换成为目标类的API。
5.1 UML类图
image.pngTarget期待调用Request方法,但是Adaptee并没有,解决的方法是通过一个适配器Adapter类,这个类继承Adaptee并且实现Target接口,把Adaptee的API与Target的API进行的适配。
5.2 使用步骤
- 创建Target接口
public interface Target {
void request();
}
- 创建源类(Adaptee)
public class Adaptee {
//源目标,需要适配的方法
public void specificRequest(){
}
}
- 创建适配器,并且继承Adaptee,实现Target
public class Adapter extends Adaptee implements Target {
/**
* 这里进行适配,当调用调用request的方法的时候,实质是调用了
* Adaptee的specificRequest();
*/
@Override
public void request() {
specificRequest();
}
}
- 具体的使用,通过Adapter类调用所需要的方法,解决目标类(Target)与源类(Adaptee)的冲突问题
public class AdapterPattern {
public static void main(String[] args){
Target target=new Adapter();
target.request();
}
}
6.对象的适配模式
对象的适配模式与类的适配模式相同,也是将适配类的API转换成为目标类的API
不同点
与类的适配模式相同不同的是,适配器Adapter与Adaptee的关系,不再是通过继承的方式,而是通过聚合
的方式进行关联。
6.1UML类图
image.png6.2使用步骤
- 创建Target接口
public interface Target {
void request();
}
- 创建源类(Adaptee)
public class Adaptee {
//源目标,需要适配的方法
public void specificRequest(){
}
}
- 创建适配器,实现Target接口,用聚合的方式关联Adaptee类,在构造函数中初始化Adaptee对象。
public class Adapter implements Target {
private Adaptee mAdaptee;
public Adapter(Adaptee adaptee){
mAdaptee=adaptee;
}
@Override
public void request() {
mAdaptee.specificRequest();
}
}
- 具体的使用
public class AdapterPattern {
public static void main(String[] args){
Target target=new Adapter(new Adaptee());
target.request();
}
}
7 类和对象适配器模式的优缺点
- 类的适配器模式
- 优点 :使用方便,代码简单。
- 缺点: 使用继承的方式,是静态的定义方式,存在高耦合,灵活性低的问题。
- 对象适配模式
- 优点: 通过对象聚合的方式,不再使用继承的方式,灵活性高,耦合性低。
- 缺点:使用复杂,需要传入对象的实例。
如果两者都可以适用的情况下,建议优先选择对象的适配器模式,多用组合或者聚合,少用继承的方式。详细的内容,请参考下方的链接。
网友评论