Adapter

1 意图:将一个类的接口转换成客户期望的另外一个接口。

Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

2 别名:Wrapper

3 TextShape类来适配TextView的接口和Shape的接口

1)继承Shape的接口和TextView的实现

2)将一个TextView的实例作为TextShape的组成部分,用TextView的接口实现TextShape

对应于Adapter模式的类版本和对象版本。TextShape为适配器 Adapter

4 适用性:

. 使用一个已存在的类,接口不符合要求

. 创建一个可复用的类,该类可以与其他不相关的类或不可预见的类协同工作。

. 使用已经存在的子类,但不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它们的父类接口

5 参与者:

Target:定义客户使用的与特定领域相关的接口

Client:与符合target的接口协同

Adaptee:定义一个已存在的接口,这个接口需要适配

Adapter:对Adaptee接口与Target接口适配

6 协作:client在Adapter实例上调用一些操作。

7 效果:类适配器和对象适配器有不同的权衡。

类适配器:

. 用一个具体的适配器类对Adaptee和Target匹配。当匹配一个类以及所有它的子类时,类Adapter将不能胜任工作。

. Adapter可以定义Adaptee的部分行为,因为Adapter是Adaptee的子类

. 仅仅引入一个对象,不需要额外的指针以间接得到adaptee

对象适配器原则:

. 允许一个Adapter与多个Adaptee——即Adaptee本身以及它的所有子类同时工作。

. 改变Adaptee的行为很困难,需要生成Adaptee的子类使得Adapter引用子类,而不是Adaptee本身

考虑其他因素:

1)Adapter的匹配程度

2)可插入的Adapter:

3)使用双向适配器提供透明操作:多态继承实现双向适配

8 实现:

注意问题:

1)C++实现时,public继承target(继承接口)、私有继承Adaptee(继承实现)

2)可插入的适配器,有三种实现方式:

. 首先为Adaptee找到一个窄接口,即可用于适配的最小操作集。最小的接口集包含两个操作:

一个操作定义在层次结构中表示一个节点,另一个操作返回该节点的子节点

窄接口三种实现途径:

a)使用抽象操作

b)使用代理对象

c)参数化的适配器

相关模式:

1)模式bridge的结构与对象适配器类似,但是bridge模式的出发点不同:bridge目的将接口部分和实现部分分离,可以对二者相对独立的改变。

Adapter是改变一个已有对象的接口

2)Decorator增强了其他对象的功能同时不改变它的接口。decorator透明性更好,decorator支持递归。

3)proxy在不改变接口的情况下为另一个对象定义了一个代理

时间: 2024-10-13 02:20:23

Adapter的相关文章

Android开发--Adapter的应用

1.简介 Adapter的作用是为GridView,ListView等界面控件与数据之间搭建桥梁,每当列表里的每一项显示到页面时,都会调用到Adapter的getView方法 返回一个View.在Android API中内置了几个实现ListAdapter的Adapter,它们分别为BaseAdapter,SimpleAdapter(以Map形式存储静态数据), SimpleCursorAdapter.Adapter,数据和UI三者关系如下: 2.BaseAdapter 自定义BaseAdapt

设计模式之Adapter(适配器)(转)

定义: 将两个不兼容的类纠合在一起使用,属于结构型模式,需要有Adaptee(被适配者)和Adaptor(适配器)两个身份. 为何使用? 我们经常碰到要将两个没有关系的类组合在一起使用,第一解决方案是:修改各自类的接口,但是如果我们没有源代码,或者,我们不愿意为了一个应用而修改各自的接口. 怎么办? 使用Adapter,在这两种接口之间创建一个混合接口(混血儿). 如何使用? 实现Adapter方式,其实"think in Java"的"类再生"一节中已经提到,有两

适配器模式(Adapter)

1.定义: 适配器模式是将一个类的接口转换成客户端希望的另一个接口,适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 结构与说明: Client:客户端,调用自己需要的领域接口Target. Target:定义客户端需要的跟特定领域相关的接口. Adaptee:已经存在的接口,但与客户端需要的特定领域接口不一致,需要被适配. Adapter:适配器,把Adaptee适配成Client需要的Target. 2.代码示例 (1)已经存在的应用接口,需要被适配的类Adaptee 1

Android中适用于ListView、GridView等组件的通用Adapter

今天随便逛逛CSDN,看到主页上推荐了一篇文章Android 快速开发系列 打造万能的ListView GridView 适配器,刚好这两天写项目自己也封装了类似的CommonAdapter,以前也在github上看到过这样的库,于是自己也把自己的代码再次整理出来与大家分享,也希望能够在CSDN这个平台上学到更多的东西,下面就一起来看看吧. 平时我们在项目中使用到ListView和GridView组件都是都会用到Adapter,比较多的情况是继承自BaseAdapter,然后实现getCount

ViewPager的Adapter中视图重用

ViewPager的PagerAdapter不像ListView/GridView的BaseAdapter,它是没有内部视图重用机制的,也就是说我先inflate出来一个,然后调用destroyItem后,这个视图就被抛弃了,如果需要更多的视图,则需要再次inflate.如果ViewPager中的所有视图基本相同,就存在内存的浪费了.这里使用一个非常简单的方法实现视图的重用: List<View> mViewList = new ArrayList<View>(); public

设计模式之四:适配器模式(Adapter Pattern)

在软件系统中,由于应用环境的变化,常常需要将"一些现存的对象"放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的.如果能既能利用现有对象的良好实现,同时又能满足新的应用环境所要求的接口?这就是适配器模式要解决的问题. 目的:将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 下面以日志记录程序为例子说明Adapter模式.假设我们在软件开发中要记录日志,包括数据库记录日志DatabaseLog和文本文件

Android开发笔记(12)——ListView &amp; Adapter

转载请注明:http://www.cnblogs.com/igoslly/p/6947225.html 下一章是关于ListFragment的内容,首先先介绍ListView的相关配置,理解ListFragment也相较容易. 在fznpcy专栏:http://blog.csdn.net/fznpcy/article/details/8658155/有较为详尽的讲解和范例. ListView & Adapter 一.Adapter Adapter是连接后端数据和前端显示的适配器接口,是数据和UI

ListView和Adapter信息显示

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" andr

Listview和Adapter作业

安卓作业:使用ListView和自定义Adapter完成列表信息显示 1.XML主布局文件代码 <?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"

适配器模式 - Adapter

Adapter Pattern, 适用场景: 接口匹配兼容: 客户代码统一调用同一接口: 在.NET中,DataAdapter用作DataSet和数据源之间的适配器以保存和检索数据. 参考: