定义

将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工 作。

UML类图

适配器分为两种,类适配器与对象适配器。

类适配器的UML图:

设计模式之适配器模式-LMLPHP

对象适配器的UML图:

设计模式之适配器模式-LMLPHP

角色

Target: 需要适配为的接口。Adapter: 适配器类。Adaptee: 被适配的类。

类适配器与对象适配器

类适配器代码如:

public class Adapter extends Adaptee implements Target {
		public void request() {
		super.doSomething();
		}
}

继承了Adaptee被适配类已获取被适配类的所有属性和行为,并实现需要适配为的接口,在接口实现方法中添加适配逻辑。

对象适配器代码如:

public class Adapter implements Target {
		public Adaptee adaptee;
        public Adapter(Adaptee adaptee){
			this.adaptee = adaptee;
		}
		public void request() {
		this.adaptee.doSomething();
		}
}

其实就是将适配器与被适配的类的关系由继承变为了注入,也就是泛化关系变为了关联关系。

两者的区别是,对象适配器比类适配器更灵活,因为在JAVA中继承只能继承一个类,如果需要一个需要适配的接口的信息来源于多个类,那么这多个类原有的属性和行为就不能用继承的方式去获取,只能通过聚合。实际开发中,用对象适配器也比用类适配器的情况多。

应用场景

在产品迭代过程中,引入了新的资源,但又不匹配现有接口,可以使用适配器模式。

11-17 09:59