Java与模式学习笔记 —— 适配器(Adapter)模式

适配器模式属于结构模式,把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。

适配器模式分为类的适配器模式对象的适配器模式两种不同的形式。
在这里插入图片描述

一、类的适配器模式

在这里插入图片描述类的适配器模式结构如上图所示,Adaptee类并没有sampleOperation2()方法,而客户端则期待这个方法。为使客户端能够使用Adaptee类,提供一个中间环节,即Adapter类。Adapter与Adaptee是继承关系,这决定了这个适配器模式是类的。

  • 目标(Target)角色:这就是所期待得到的接口。注意,由于这里讨论的是类适配器模式,因此目标不可以是类
  • 源(Adaptee)角色:现有需要适配的接口。
  • 适配器(Adapter)角色:适配器类是本模式的核心。适配器把源接口转换成目标接口。显然,这一角色不可以是接口,而必须是具体类
// 目标角色以一个Java接口的形式实现
public interface Target {
	/**
	 * 这是源类也有的方法sampleOperation1
	 */
	void sampleOperation1();
	/**
	 * 这是源类没有的方法sampleOperation2
	 */
	void sampleOperation2();
}

// 源角色是一个具体类
public class Adaptee {
	/**
	 * 源类含有的方法sampleOperation1
	 */
	public void sampleOperation1() {}
}

// 适配器角色扩展了源角色同时又实现了目标接口
public class Adapter extends Adaptee implements Target {
	/**
	 * 由于源类没有方法sampleOperation2,
	 * 因此适配器类补充上这个方法
	 */
	public void sampleOperation2() {
		// Write your code here
	}
}

对象的适配器模式

在这里插入图片描述与类的适配器模式不同的是,对象的适配器模式不是使用继承关系连接到Adaptee类,而是使用委派关系连接到Adaptee类。

  • 目标(Target)角色:这就是所期待的接口,目标可以是具体的或抽象的类
  • 源(Adaptee)角色:现有需要适配的接口。
  • 适配器(Adapter)角色:适配器类是本模式的核心,适配器把源接口转换成目标接口,显然,这一角色必须是具体类
// 目标角色是以一个Java接口的形式实现的
public interface Target {
	/**
	 * 这是源类也有的方法sampleOperation1
	 */
	void sampleOperation1();
	/**
	 * 这是源类没有的方法sampleOperation2
	 */
	void sampleOperation2();
}

// 源角色是一个具体类
public class Adaptee {
	/**
	 * 源类含有的方法sampleOperation1
	 */
	public void sampleOperation1() {}
}

public class Adapter implements Target {
	private Adaptee adaptee;
	public Adapter(Adaptee adaptee) {
		super();
		this.adaptee = adaptee;
	}
	
	/**
	 * 源类有方法sampleOperation1
	 * 因此适配器类直接委派即可
	 */
	public void sampleOperation1() {
		adaptee.sampleOperation1();
	}
	
	/**
	 * 源类没有方法sampleOperation2
	 * 因此由适配器类需要补充此方法
	 */
	public void sampleOperation2() {
		// Write your code here
	}
}

适配器模式的用意是将接口不同而功能相同或者相近的两个接口加以转换,适配器角色补充了源角色没有的方法而目标接口需要的方法,千万不要误以为适配器模式就是为了补充源角色没有的方法而准备的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值