博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式——适配器模式详解
阅读量:4046 次
发布时间:2019-05-24

本文共 2128 字,大约阅读时间需要 7 分钟。

0. 前言  

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

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

 

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模式的一个很好的应用场景。

你可能感兴趣的文章
Django objects.all()、objects.get()与objects.filter()之间的区别介绍
查看>>
python:如何将excel文件转化成CSV格式
查看>>
机器学习实战之决策树(一)
查看>>
机器学习实战之决策树二
查看>>
[LeetCode By Python]7 Reverse Integer
查看>>
[leetCode By Python] 14. Longest Common Prefix
查看>>
[LeetCode By Python]121. Best Time to Buy and Sell Stock
查看>>
[LeetCode By Python]122. Best Time to Buy and Sell Stock II
查看>>
[LeetCode By Python]125. Valid Palindrome
查看>>
[LeetCode By Python]136. Single Number
查看>>
Android/Linux 内存监视
查看>>
用find命令查找最近修改过的文件
查看>>
Android2.1消息应用(Messaging)源码学习笔记
查看>>
android raw读取超过1M文件的方法
查看>>
ubuntu下SVN服务器安装配置
查看>>
MPMoviePlayerViewController和MPMoviePlayerController的使用
查看>>
CocoaPods实践之制作篇
查看>>
[Mac]Mac 操作系统 常见技巧
查看>>
苹果Swift编程语言入门教程【中文版】
查看>>
捕鱼忍者(ninja fishing)之游戏指南+游戏攻略+游戏体验
查看>>