适配器模式
定义
适配器模式又叫做变压器模式,也叫做包装模式。将一个类的接口转换成客户希望的另外一个接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。
英文定义为:Convert the interface of a class into another interface clients expect . Adapter lets classes work together that couldn't otherwise because of incompatible interface .
适配器模式的UML图示如下所示:
适配器模式.jpg上图中包含的角色及职责如下:
- 目标角色(Target):定义把其他类转换为我们期望的接口。
- 源角色(Adaptee):需要适配的接口,就是被适配的对象。
- 适配器角色(Adapter):是类适配器模式的核心。适配器把源接口转换成目标接口。
适配器模式的示例代码如下:
//目标角色
public interface Target{
//目标角色有自己的方法
public void request();
}
//目标角色的实现类
public class ConcreteTarget implements Target{
public void request(){
System.out.println("if you need any help,pls call me!");
}
}
//源角色
public class Adaptee{
//原有的业务逻辑
public void doSomething(){
System.out.println("I'm kind of busy,leave me alone,pls!");
}
}
//适配器角色
public class Adapter extends Adaptee implements Target{
public void request(){
super.doSomething();
}
}
//场景类
public class Client{
public static void main(String[] args){
//原有的业务逻辑
Target target = new ConcreteTarget();
target.request();
//现在增加了适配器角色后的业务逻辑
Target target2 = new Adapter();
target2.request();
}
}
优缺点
优点:
- 适配器模式可以让两个没有关系的类在一起运行,只要适配器这个角色能够搞定就可以。
- 增加了类的透明性
- 提高了类的复用度
- 灵活性非常好
缺点:
- 对于类适配器而言,不能够适配类的子类;而对于对象适配器而言,重新定义被适配类的行为比较困难。
使用场景:
- 系统需要使用现有的类,而此类的接口不符合系统的需要;
- 想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引用的类,这些源类不一定有一致的接口;
- 通过接口转换,将一个类插入到另一个类系中。
扩展
对象适配器的UML类图如下所示:
对象适配器.jpg对象适配器和类适配器的区别:
- 类适配器是类间继承,对象适配器是对象的合成关系,也可以说是类的关联关系。
网友评论