设计模式——适配器模式详解

0. 前言  

写在最前面,本人的设计模式类博文,建议先看博文前半部分的理论介绍,再看后半部分的实例分析,最后再返回来复习一遍理论介绍,这时候你就会发现我在重点处标红的用心,对于帮助你理解设计模式有奇效哦~本文原创,转载请注明出处为SEU_Calvin的博客

适配器模式将不同的东西通过一种转换使得它们能够协作起来,比如使两个不兼容的类融合起来。尤其是在没有源代码、或者不修改源码中接口的情况下,使两个接口兼容。

 

1. 适配器模式介绍

适配器模式定义:

适配器模式把一个类的接口变换成客户端所期待的另一个接口,从而使原本因接口不兼容而无法一起工作的两个类能一起工作

 

适配器模式的使用场景:

1)系统需要使用现有的类,而此类的接口不符合需要。

2)需要一个统一的输出接口,而输入类型不可预知(如Android中的Adapter)。

3)创建一个可以复用的类(如Android中的Adapter),使得该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。

 

适配器模式包括的角色:

1)目标Target类:客户所期待得到的接口

2)需要适配的Adaptee类:需要适配的类

3)适配器Adapter类:通过包装一个需要适配的对象,把原接口转换成目标接口。  

 

2.  类适配器

从下面代码中可以看出,需要适配的类Adaptee,如何向客户提供所需要的接口呢,可以提供一个Adapter类继承Adaptee并实现Target接口即可。这就是所谓的类适配器。类图和代码如下。

/**
 * Adapter Pattern
 * Created by Calvin on 2017/5/10.
 */

// 已存在的、具有特殊功能,但不符合我们既有的标准接口的类
class Adaptee {
	public void specificRequest() {
		System.out.println("被适配的类,该类具有特殊功能");
	}
}

// 目标接口
interface Target {
	public void request();
}

// 具体目标类,只提供普通功能
class ConcreteTarget implements Target {
	public void request() {
		System.out.println("普通类,该类具有普通功能");
	}
}

// 适配器类,继承了被适配类,同时实现标准接口
class Adapter extends Adaptee implements Target{
	public void request() {
		super.specificRequest();
	}
}

//测试类
// 使用普通功能类
Target concreteTarget = new ConcreteTarget();
concreteTarget.request();   //输出“普通类,该类具有普通功能”

// 使用特殊功能类,即适配类
Target adapter = new Adapter();
adapter.request();     //输出“被适配的类,该类具有特殊功能”

3.  对象适配器

类适配器使Adapter 类既继承了被适配类,又实现了 Target 接口,在 Client 类中我们可以根据需要选择并创建任一种符合需求的子类,来实现具体功能。

另外一种适配器模式是对象适配器,它不是使用继承再实现的方式,而是只实现标准接口,再在内部维护被适配类的引用的方式,类图和代码如下。

/**
 * Adapter Pattern
 * Created by Calvin on 2017/5/10.
 */
//只需要修改适配器类即可
//适配器类,只实现标准接口
class Adapter implements Target{
	private Adaptee adaptee;
	public Adapter (Adaptee adaptee) {
		this.adaptee = adaptee;
	}
	
	public void request() {
		this.adaptee.specificRequest();
	}
}

//测试类
Target concreteTarget = new ConcreteTarget();
concreteTarget.request();  //输出“普通类,该类具有普通功能”

		
//Adapter需要先创建一个被适配类的对象作为参数
Target adapter = new Adapter(new Adaptee());
adapter.request();  //输出“被适配的类,该类具有特殊功能”

4.  适配器模式总结

对象适配器比类适配器更加灵活、实用,毕竟少了一层继承关系。

总之适配器模式使现有的类可以满足新的需求,因此使现有功能能更好的复用

Android开发中,Adapter的使用在ListView中很常见,用户的Item各式各样,而最终都是getView()返回一个View。输入有无数种情况,但是输出类型统一。这也是Adapter模式的一个很好的应用场景。

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值