适配器角色在android中使用

适配器模式(Adapter):

适配器模式是一种行为模式,它可以把一个类的接口转换成为另一个所期待的另一种接口,这样可以使原本因接口无法在一起工作的两个类能够在一起工作了。适配器模式有类的适配器和对象的适配器两种形式,这里只介绍对象的适配器模式(与类适配器模式类似),下面为类的适配器(左)和对象适配器模式(右)的简略类图结构:

适配器模式所涉及的角色有适配角色、目标角色和适配器角色,具体描述如下:

适配角色:提供需要适配转换的接口角色。

目标角色:调用者所期待的接口。

适配器角色:把适配角色转为目标角色的接口。

与之前一样,我们同样列举一个实例来说明适配器模式的使用。在电商平台中,查询商品、查看商品详情、添加购物车和支付是最常见不过了。假如原系统中已经实现了商品的查询、添加购物车以及支付功能,查询功能包括查询商品、查看详情、以及计算商品总价;添加购物车包括查看详情、商品添加购物车以及支付,目前这两个模块功能是不协同工作的,所以下面我们将会把购物车适配成为可以与查看商品一起工作,实现他们的一体化操作。那么他们的详细结构类图如下所示:

好了,下面罗列下适配器模式的核心代码。

目标角色(SaleShopCenter):

/**

* @description :

* 目标对象

*/

public
interface
SaleShopCenter {

List<Sale>scanSaleItems(String pKey);

SalescanSaleDetail(String pId);

double calculateTotalPrice();

}

适配角色(ShoppingCart):

/**

* @description :

* 适配的对象

*/

public
class
ShoppingCart {

private Salesale =
null;

public
static
List<Sale> results =null;  
// 模拟缓存数据?

public Sale scanSaleDetail(StringpId) {

// 异步请求网络

// TODO

// 这里模拟实现

sale = getSale(pId);

return
sale;

}

public
void
addSaleShoppingCart(List<Sale> sales) {

// 异步请求网络

// TODO

addCart(sales);

}

public
boolean
billPay(List<Sale> sales) {

// 异步请求网络

// TODO

// 这里模拟支付成功

booleanpayStatus =
true;

if(null ==SaleShoppingManager.results

||0 > SaleShoppingManager.results.size()) {

payStatus = false;

}

return
payStatus;

}

private Sale getSale(StringpId) {

if(null ==SaleShoppingManager.results

||0 > SaleShoppingManager.results.size()) {

return
null
;

}

Salesale = null;

for(Saleitem : SaleShoppingManager.results) {

if(item.getpID().equals(pId)) {

sale =
item;

}

}

return
sale;

}

private
void
addCart(List<Sale> sales) {

results =
sales;

}

}

适配器角色(SaleShoppingManager):

/**

* @description :

* 适配器对象角色

*/

public
class
SaleShoppingManager implementsSaleShopCenter {

private ShoppingCartcart =
null;

public
static
List<Sale> results =null;  
// 模拟缓存数据

public SaleShoppingManager() {

cart = new ShoppingCart();

}

@Override

public List<Sale> scanSaleItems(StringpKey) {

results =
new
ArrayList<Sale>();

// 异步网络请求

// TODO

// 这里模拟实现

results = getSales();

return
results
;

}

@Override

public Sale scanSaleDetail(StringpId) {

return
cart.scanSaleDetail(pId);

}

@Override

public
double
calculateTotalPrice() {

if(null ==results || 0 >
results.size()) {

return 0;

}

double
totalPrice = 0;

for(Salesale :
results) {

totalPrice +=
sale.getpPrice();

}

return
totalPrice;

}

private List<Sale> getSales() {

List<Sale>result =
new
ArrayList<Sale>();

Salesale = new Sale();

sale.setpID("0000121300");

sale.setbID("1111232300");

sale.setpName("衬衫-黑领");

sale.setpPrice(123.14);

sale.setpDescri("黑色、圆领,高端大气!");

result.add(sale);

Salesale2 = new Sale();

sale2.setpID("0000121311");

sale2.setbID("1111232311");

sale2.setpName("衬衫-黑领");

sale2.setpPrice(123.34);

sale2.setpDescri("黑色、圆领,高端大气!");

result.add(sale2);

Salesale3 = new Sale();

sale3.setpID("0000121322");

sale3.setbID("1111232322");

sale3.setpName("衬衫-黑领22");

sale3.setpPrice(123.24);

sale3.setpDescri("黑色、圆领,高端大气!");

result.add(sale3);

return
result;

}

public ShoppingCart getCart() {

return
cart;

}

}

下面为程序的运营结果图,后面我会上传项目代码,感兴趣的同学可以下载跑跑。效果图如下:

好了,到这里适配器模式已经介绍完了。

点击我下载代码!

技术交流群:179914858

时间: 2025-01-28 13:21:01

适配器角色在android中使用的相关文章

Android中万能的适配器的详细讲解

Android中万能的适配器的详细讲解 在Android开发中,适配器的用处是非常大的,尤其是效率优化方面.除了使用ViewHolder复用View之外,如果存在很多的ListView或者是一个ListView中存在很多的View组件,那对代码的阅读不是很好的.考虑到优化以及共通方面,我封装了ViewHolder类以及将Adapter类封装成共通的了,将对以后的开发带来很大的方便. (1).ViewHolder类的封装如下:ViewHolder类: package com.chengdong.s

在Android中自定义适配器

啊喂,好久没更新博客了,唉唉,真是抱歉啊!求原谅! 1.自定义列表项适配器的主要方法是: ①public int getCount()=====>此方法用来控制列表项的个数 ②public View getView(int position, View convertView, ViewGroup parent)====>此方法用来控制页面 2.自定义适配器在实际开发中使用的非常灵活也非常广泛,因为,此方法一定要掌握.(虽然也有现成的适配器,但是在实际开发中使用不多) 3.在自定义适配器的过程

Android中GridView通过自定义适配器实现图文视图排列

Android中GridView组件用来以网格方式排列视图,与矩阵类似,当屏幕上有很多元素(文字.图片或其他元素)需要显示时,可以使用该组件.下面我们通过代码实现如下图例(为了方便截图,将事件处理(土司)设置到屏幕顶部) Layout下gridview.xml布局文件: 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schema

Android中XML数据解析

转载请注明出处:http://blog.csdn.net/yegongheng/article/details/38296207 XML初步 今天我们来学习另一种非常重要的数据交换格式-XML.XML(Extensible Markup Language的缩写,意为可扩展的标记语言),它是一种元标记语言,即定义了用于定义其他特定领域有关语义的.结构化的标记语言,这些标记语言将文档分成许多部件并对这些部件加以标识.XML 文档定义方式有:文档类型定义(DTD)和XML Schema.DTD定义了文

【转】Android中Spinner下拉列表(使用ArrayAdapter和自定义Adapter实现)

原文网址:http://embed.21ic.com/software/android/201403/31603.html 1 :Android中Spinner下拉列表(使用ArrayAdapter和自定义Adapter实现) . 今天学习了Spinner组件,使用Spinner相当于从下拉列表中选择项目,下面演示一下Spinner的使用(分别使用ArrayAdapter和自定义Adapter实现) (一):使用ArrayAdapter进行适配数据: ①:首先定义一个布局文件: android:

Android 中常见控件的介绍和使用

1 TextView文本框 1.1 TextView类的结构 TextView 是用于显示字符串的组件,对于用户来说就是屏幕中一块用于显示文本的区域.TextView类的层次关系如下: java.lang.Object   ? android.view.View   ? android.widget.TextView 直接子类: Button, CheckedTextView, Chronometer, DigitalClock, EditText 间接子类: AutoCompleteTextV

Android中使用ExpandableListView实现好友分组

一个视图显示垂直滚动两级列表中的条目.这不同于列表视图,允许两个层次,类似于QQ的好友分组.要实现这个效果的整体思路为: 1.要给ExpandableListView 设置适配器,那么必须先设置数据源. 2.数据源,就是此处的适配器类,此方法继承了BaseExpandableListAdapter,它是ExpandableListView的一个子类.需要重写里面的多个方法.方法的意思,代码中都有详细的注释.数据源中,用到了自定义的View布局,此时根据自己的需求,来设置组和子项的布局样式.get

进阶篇-用户界面:4.Android中常用组件

1.下拉菜单 在Web开发中,HTML提供了下拉列表的实现,就是使用<select>元素实现一个下拉列表,在其中每个下拉列表项使用<option>表示即可.这是在Web开发中一个必不可少的交互性组件,而在Android中的对应实现就是Spinner. 方法一: 以资源方式,静态展示 Spinner 选项: <Spinner android:layout_width="match_parent" android:layout_height="wra

Android笔记——Android中数据的存储方式(三)

Android系统集成了一个轻量级的数据库:SQLite,所以Android对数据库的支持很好,每个应用都可以方便的使用它.SQLite作为一个嵌入式的数据库引擎,专门适用于资源有限的设备上适量数据存取,现在的主流移动设备像Android.iPhone等都使用SQLite作为复杂数据的存储引擎,并且它是以手机内存为储存的. 那么,实际开发项目中有大量数据需要读写,并且需要面临大量用户的并发储存的情况呢.就不应该把数据存放在手机等移动设备的SQLite数据库里,移动设备的储存能力和计算能力都不足以